小编在此之前,通过一个小例子,简单的形容了一下进程与线程之间的关系,现在网络编程中的多线程说一下!!!

*进程的基本概念

  每一个进程都是一个应用程序,都有自己独立的内存空间,一般来说一个应用程序存在一个进程,但也有多个进程的情况;

   同一个进程中的线程共享内存中内存和资源。

*线程的基本概念

  每一个程序都有一个主线程,程序启动时创建(调用main来启动)。主线程的生命周期是和应用程序绑定的,程序退出(结束)时,主线程也就停止了。多线程技术表示,一个应用程序都多个线程,使用多线程能提供CPU的使用率,防止主线程堵塞。任何有可能堵塞主线程的任务不要在主线程中执行

########################创建多线程的方法#########################
    //第一种创建方法
    NSThread *mainThread = [[NSThread alloc]initWithTarget:self selector:@selector(mutableThread:) object:nil];
    [mainThread start];
    
    //第二种创建方式
    [NSThread detachNewThreadSelector:@selector(mutableThread:) toTarget:self withObject:nil];

//第三种创建方式
    [self performSelectorInBackground:@selector(mutableThread:) withObject:nil];

//第四种创建方式
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
    [operationQueue addOperationWithBlock:^{
        for (int i = 0; i <= 100; i++) {
            NSLog(@"------这是duo线程1----%d",i);
        }

}];
    
    //第五种创建方式
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
    //设置线程进行的并发数
    operationQueue.maxConcurrentOperationCount = 5;
    NSInvocationOperation * invocationQperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(mutableThread:) object:nil];
    //将线程添加到线程队列中
    [operationQueue addOperation: invocationQperation];

备注:

1、假设主进程里面有3个线程,分别是1、2、3,如何先让线程2先执行呢?

 在多线程中,各线程之间,可以根据线程之间的优先级来进行设置。

 共有五个优先级:
    NSOperationQueuePriorityVeryLow = -8L;
    NSOperationQueuePriorityLow = -4L;
    NSOperationQueuePriorityNormal = 0;
    NSOperationQueuePriorityHigh = 4;
    NSOperationQueuePriorityVeryHigh = 8

2、UI的操作都是在主线程上运行的。那如何从其他线程跳转到主线程呢?

  通过设计的方法来进行线程之间的跳转:
    [self performSelectorOnMainThread:@selector(mainThread) withObject:self waitUntilDone:YES];

3、NSThread的常用方法
  //获取当前线程对象
  + (NSThread *)currentThread;
  //判断当前线程是否是多线程
  + (BOOL)isMultiThreaded;
  //是当前线程睡眠指定的时间,单位为秒
  + (void)sleepForTimeInterval:(NSTimeInterval)ti;
  //退出当前线程
  + (void)exit;
  //判断当前线程是否为主线程
  + (BOOL)isMainThread;
  //启动该线程
  - (void)start

小编希望和各位大牛一起探讨,并希望大牛指正!!!!!

网络与多线程---OC中多线程使用方法(一)的更多相关文章

  1. 网络与多线程---OC中多线程方法GCD(二)

    小编在前一篇中介绍了多线程实现的五种常用方法.在接下来所介绍的这种方法是最具有魅力的,最具有诱惑的实现多线程的方案---GCD 一.什么是GCD GCD是Grand Central Dispatch的 ...

  2. iOS开发——多线程OC篇&多线程详解

    多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...

  3. iOS开发——多线程OC篇&多线程总结

    多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...

  4. OC中属性及方法

    1.声明式属性    a.实例变量    b.声明属性        自动生成setter/getter方法        .h ->@property 属性类型 属性名;        .m ...

  5. iOS开发——多线程OC篇&多线程中的单例

    多线程中的单例 #import "DemoObj.h" @implementation DemoObj static DemoObj *instance; // 在iOS中,所有对 ...

  6. OC中多线程的一些概念

    1.进程1.1>进程是指在系统中正在运行的一个应用程序(同时打开QQ和Xcode,系统会分别启动2个进程)1.2>每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内 2.线 ...

  7. OC中的私有方法

    1.不写在.h文件中 2.不写在.m文件中 一.私有方法: 没有在.h文件当中进行声明的方法在OC中都被称为私有方法 私有方法子类是无法继承到的

  8. OC中自定义init方法

    ---恢复内容开始--- 我们知道,在函数中实例化一个对象,大多数会同时进行初始化,如 Person *p =[ [Person alloc]init]; 此时已经进行了初始化,使用init方法,那么 ...

  9. OC中block作方法参数时的用法

    方式一.在传参时直接声明block回调方法. 1. 定义方法: - (int)doTest:(NSString *)name para1:(int)temp1 para2:(int)temp2 suc ...

随机推荐

  1. MYSQL——root密码更换

    方法1: 用SET PASSWORD命令mysql -u rootmysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass') ...

  2. Win10新增功能快捷键大全

    原文地址:http://wenwen.sogou.com/z/q703976788.htm贴靠窗口:Win + 左/右 > Win + 上/下 > 窗口可以变为 1/4 大小放置在屏幕 4 ...

  3. hdu 5079 Square

    http://acm.hdu.edu.cn/showproblem.php?pid=5079 题意: n*n网格,每个格子可以涂黑色或白色,有的格子必须涂黑色 问最大白色正方形边长分别为0,1,2,… ...

  4. Phalcon框架之———— 2.0升级到3.0 问题Model验证问题解决

    Github源码:https://github.com/phalcon/cphalcon/tree/master/phalcon/validation/validator Phalcon 2.0 Mo ...

  5. js拾遗: replace 替换参数

    先来看一个简单的例子吧. var str = "123X321".replace("X", "$'"); 替换后的 str 是什么呢?是 & ...

  6. C# UDP广播消息

    首先是发送端: /// <summary> /// 发送UDP消息 /// </summary> /// <param name="msg">消 ...

  7. 使用SpringCloud搭建高可用服务注册中心

    我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭建好的服务注册中心是一个单节点的服务注册中心,这 ...

  8. [转]如何取得当前正在执行的shell脚本的绝对路径?

    来源:http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm 如题,一般我们写Shell脚本的时候,都 ...

  9. 在 Ubuntu13.10 服务器中安装 Munin(监视工具)【转】

    Munin 监测工具可检测所有的计算机,并记录好看到的计算机.通过图形Web界面的的方式显示所有信息.重点是即插即用的功能.完成安装后,大量的控插件会被打. 使用 Munin 您可以轻松地监视您的计算 ...

  10. jira ao UpgradeTask

    插件发布到市场后,后续版本迭代的过程中,可能会对ao实体类的字段作添加或删除,或者要将某一字段的值映射解析到另一字段上. 本来这个工作,可以在插件启动的时候,在实现了com.atlassian.sal ...