博客> 多线程技术之三NSThread
多线程技术之三NSThread
2018-09-21 04:14 评论:0 阅读:844 Iven_Ma
ios 多线程

1.初识NSThread 2.NSThread的使用方法 3.多线程通讯 4.线程同步

1.概念 NSThread是对pthread的上层封装,把线程处理为面向对象的逻辑。一个NSThread即为一个线程。 POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程

2.优点 NSThread是一种轻量级的多线程实现方法

3.缺点 需要自己管理线程的生命周期,线程同步 NSThread实现的线程同步对数据的加锁会有一定的系统开销

4.NSThread的使用

(1)初始化一个对象 -init -initWithTarget:Selector:object

(2)启动一个线程 +(void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

-start -main

(3)线程环境 1.+isMainThread 2.+mainThread 3.+isMultiThread 4.+currentThread

(4)停止一个线程 5.+sleepUntilDate: 6.+sleepForTimeInterval: 7.exit 8.-cancle

5.NSThread的一些属性 线程属性name 栈空间stackSize 全局属性threadDistionary 线程优先级+setPriority:(0-1)

确定线程的执行状态 1.excuting 2.finished 3.cancelled

6.创建线程的四种方法

 屏幕快照 2016-03-29 下午7.41.00.png

 屏幕快照 2016-03-29 下午7.41.09.png

 屏幕快照 2016-03-29 下午7.41.18.png

第四种是自定义子类

 屏幕快照 2016-03-29 下午7.41.30.png

7.多线程之间的通讯 线程之间的通信主要表现在:一个线程传递数据给另一个线程,或者是在一个线程执行完任务,转到另一个线程继续完成任务。

 屏幕快照 2016-03-29 下午7.51.43.png

8.完善子进程的入口 对子线程入口的完成需要我们完成以下三点: 1.设置Autorelease 2.设置RunLoop 3.终止进程

9.数据加锁 多个进程对公有变量同时进行读写,当多个线程需要对变量进行写操作,后一个进程往往会修改掉前一个进程,从而使前一个进程的数据被修改,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

_lock = [[NSLock alloc]init];

//数据加锁 [_lock lock];

//数据解锁 [_lock unlock];

10.线程同步 多线程经常遇到一些问题,a线程需要等待b线程执行后某个结果继续执行,也就是同步问题这时就需要a等待b。

 屏幕快照 2016-03-29 下午8.07.28.png

 屏幕快照 2016-03-29 下午8.07.48.png

小结: NSThread作为多线程编程重要的工具类,我们应该尝试使用并理解其中的方式。但是NSThread得缺点很明显,我们需要手动实现非常复杂的管理线程逻辑,自己管理线程的生命周期,线程同步。线程同步对数据加锁会有一定的系统的开销。当然他的优点同样明显比其他多线程方案较轻量级,更直观的控制线程对象。

收藏
1
sina weixin mail 回到顶部