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

*进程的基本概念

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

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

*线程的基本概念

  每一个程序都有一个主线程,程序启动时创建(调用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. 将Sql查询语句获取的数据插入到List列表里面

    Sql查询语句获取的数据是分格式的,我们还用SqlDataReader来做,然后用IDataReader来接收读取,以下是代码: //我想查询一个用户表的信息,该用户有姓名,密码,信息三列 //1.定 ...

  2. Linux命令dd与cp的区别

    原文链接:http://blog.csdn.net/erazy0/article/details/6087554 问:看了一些关于dd和cp的命令,但是我始终无法明白dd和cp之间有什么不同?不是都可 ...

  3. Tomcat——Linux下的安装和配置

    Tomcat在Linux上的安装与配置 以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54. 1.下载JD ...

  4. C#的Struct

  5. Nginx 服务器性能Bug和性能优化方案(真实经历)

    一.遇到的问题 1.问题:本应该是3个ffmpeg ,但是怎么会有5个ffmpeg出现? 2.Lua脚本问题,一直写入日志,导致有大量的日志,这里的错误日志是直接写进nginx的error.log 日 ...

  6. Spring RedisTemplate操作-通道操作(10)

    @Autowired @Resource(name = "redisTemplate") private RedisTemplate<String, String> r ...

  7. 一致性哈希算法介绍,及java实现

    应用场景 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Res ...

  8. Eclipse的个性化设置

    Eclipse的个性化设置 1. 在Eclipse中查看JDK源码的配置 a. 点 “window”-> "Preferences" -> "Java&quo ...

  9. lucene入门创建索引——(二)

    1.程序宏观结构图

  10. 【干货】DD 和 netcat实战---擦除数据和远控

    原创:Unit 2: Linux/Unix Acquisition 2.1 Linux/Unix Acquistion Using dd Continued DD也是一个复制设备数据的工具,比特流复制 ...