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

*进程的基本概念

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

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

*线程的基本概念

  每一个程序都有一个主线程,程序启动时创建(调用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. Oracle之xml的增删改查操作

    工作之余,总结一下xml操作的一些方法和心得! tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数 同名标签用数 ...

  2. python---django中orm的使用(4)字段,参数(on_delete重点)补充,一对多,一对一,多对多

    1.索引: 普通索引:加快查找速度 唯一索引:加快查找速度,唯一约束 主键索引:加快查找速度,唯一索引,不为空 class UserInfo(models.Model): username = mod ...

  3. jeecms常用的标签

    友情链接 <dt>友情链接:</dt> [@cms_friendlink_list] [#list tag_list as link] <dd><a href ...

  4. Spark记录-Scala类与对象小例子

    //基类-Person class Person(val na: String, val ag: Int) { //属性 var name: String = na var age: Int = ag ...

  5. 流媒体技术学习笔记之(十一)Windows环境运行EasyDarwin

    流媒体平台框架下载安装 Github下载 下载地址:https://github.com/EasyDarwin/EasyDarwin/releases 解压安装 选择Windows 安装平台的安装包( ...

  6. unp的hello word

    最近无聊,再学学unp吧.学学网络编程.下面是一个demo: intro/daytimetcpcli.c #include "unp.h" int main(int argc, c ...

  7. HDU 4506 小明系列故事——师兄帮帮忙(二分快速幂)

    题意:就是输入一个数组,这个数组在不断滚动,而且每滚动一次后都要乘以一个数,用公式来说就是a[i] = a[i-1] * k;然后最后一位的滚动到第一位去. 解题报告:因为题目中的k要乘很多次,达到了 ...

  8. Sortable.js参数

    所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象ui.pos ...

  9. 在vue-cli下读取模拟数据请求服务器

    写此记录时vue脚手架的webpack是3.6.0 此文章方法亦可用于vue-cli3,直接在vue.config.js里面添加 本记录使用vue-resource,先安装: cnpm install ...

  10. lucene入门查询索引——(三)

    1.用户接口(lucene不提供)