您的位置:首页 > 其它

NsThread学习

2016-02-21 00:55 155 查看

一 创建和启动

创建和启动(推荐使用):

NSThread *thread = [[NSThreadalloc]initWithTarget:selfselector:@selector(download)object:nil];
thread.name =@"下载线程";
[thread
start];
参数分析:调用方法、传递参数
PS:init方法后仅仅是创建了线程对象,需要通过start方法将线程对象放入可调用线程池。一个NSThread对象代表一条线程。

其他两种常用线程的方法:

创建线程并自动启动:
[NSThreaddetachNewThreadSelector:@selector(download)toTarget:selfwithObject:nil];

隐式创建线程并启动:
[selfperformSelectorInBackground:@selector(download)withObject:nil];

分析:两种方法创建线程更为快捷,但是两者方法返回都为void即没有返回线程对象,无法对线程进行一些操作。

二 线程状态

New:新建:通过init方法创建的线程对象还未进入可调度线程池。

Runnable:就绪:使用start方法、线程进入可调度线程池中。或CPU调度完当前线程后,转而调度其他线程。(CPU一次只能运行一个线程。只用调度够快可以产生多线程同时运行的效果)或slepp到时,得到互斥锁。

Running:运行时:CPU调度到当前线程,线程运行。

Blocked:堵塞:在running状态调用了sleep方法,线程进入睡眠等待互斥锁。

Dead:死亡:线程执行完毕,或者异常、强制退出。PS:线程对象Dead后不能再次执行,想要再次执行需要重新创建线程。

三 线程间通信

从其他线程回到主线程:
[self
performSelectorOnMainThread:@selector(mySetView:)
withObject:date
waitUntilDone:YES];
分析:
第三个参数:是否等待主线程执行完再执行自线程中接下来的内容。

从某个线程跳到其他线程:
- (void)performSelector:(SEL)aSelectoronThread:(NSThread
thrwithObject:(id)arg waitUntilDone:(BOOL)wait;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: