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

*进程的基本概念

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

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

*线程的基本概念

  每一个程序都有一个主线程,程序启动时创建(调用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. python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)

    一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...

  2. Codeforces 906 D. Power Tower

    http://codeforces.com/contest/906/problem/D 欧拉降幂 #include<cstdio> #include<iostream> usi ...

  3. 20155318 2016-2017-2 《Java程序设计》第六周学习总结

    20155318 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...

  4. 【洛谷P2420】让我们异或吧

    题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能 ...

  5. Sortable.js参数

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

  6. PB程序调用C++ COM生成对象发回-2问题

    C++写的COM组件用于读CPU卡,在C#中正常能够引用使用,但是在PB中却是返回-2,不识别类名,代码如下: OleObject ole_AddComole_AddCom = Create OLEO ...

  7. python psutil监控系统资源【转】

    通过 运用 Python 第三方 系统 基础 模块, 可以 轻松 获取 服务 关键 运营 指标 数据,包括 Linux 基本 性能. 块 设备. 网卡 接口. 系统 信息. 网络 地址 库 等 信息. ...

  8. 006_mac osx 应用跨屏幕

    一般情况下 mac osx 中一个应用程序只能在一个屏幕上显示,作为从 windows 转过来的用户有点不太习惯,Goolge 后发现还是有解决方案的(虽然不是很好用). 打开 Mac 的系统偏好设置 ...

  9. liunx jdk安装

    打开https://www.oracle.com/technetwork/java/javase/downloads/index.html 选择Development版本(server为服务器版本), ...

  10. JavaScript——双向链表实现

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...