多线程之线程的状态
来源:互联网 发布:我与网络演讲稿2000字 编辑:程序博客网 时间:2024/05/21 07:49
线程状态
线程状态
新建
- 实例化线程对象
就绪
- 向线程对象发送
start
消息,线程对象被加入可调度线程池
等待 CPU 调度 detachNewThreadSelector
方法和performSelectorInBackground
方法会直接实例化一个线程对象并加入可调度线程池
- 向线程对象发送
运行
- CPU 负责调度
可调度线程池
中线程的执行 - 线程执行完成之前(死亡之前),状态可能会在
就绪
和运行
之间来回切换 就绪
和运行
之间的状态变化由 CPU 负责,程序员不能干预
- CPU 负责调度
阻塞
- 当满足某个预定条件时,可以使用休眠或锁阻塞线程执行
sleepForTimeInterval
:休眠指定时长sleepUntilDate
:休眠到指定日期@synchronized(self)
:互斥锁
- 当满足某个预定条件时,可以使用休眠或锁阻塞线程执行
死亡
- 正常死亡
- 线程执行完毕
- 非正常死亡
- 当满足某个条件后,在线程内部自己中止执行(自杀)
- 当满足某个条件后,在主线程给其它线程打个死亡标记(下圣旨),让子线程自行了断.(被逼着死亡)
- 正常死亡
代码
- (void)statusDemo { NSLog(@"先睡会"); [NSThread sleepForTimeInterval:1.0]; for (int i = 0; i < 20; i++) { if (i == 9) { NSLog(@"再睡会"); [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; } NSLog(@"%d %@", i, [NSThread currentThread]); if (i == 16) { NSLog(@"88"); // 终止线程之前,需要记住释放资源 [NSThread exit]; } } NSLog(@"over");}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 注意不要在主线程上调用 exit 方法// [NSThread exit]; // 实例化线程对象(新建) NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(statusDemo) object:nil]; // 线程就绪(被添加到可调度线程池中) [t start];}
小结
阻塞
方法执行过程,符合某一条件时,可以利用
sleep
方法让线程进入阻塞
状态sleepForTimeInterval
从现在起睡多少秒
sleepUntilDate
从现在起睡到指定的日期
死亡
[NSThread exit];
- 一旦强行终止线程,后续的所有代码都不会被执行
- 注意:在终止线程之前,应该注意释放之前分配的对象!
注意:线程从
就绪
和运行
状态之间的切换是由CPU
负责的,程序员无法干预
0 0
- 多线程之线程的状态
- java 多线程之线程的状态
- 多线程之——线程的状态
- 多线程:线程的状态
- java多线程之线程状态
- Java多线程之线程状态
- iOS多线程之线程状态
- java多线程之线程状态
- java多线程之线程的6种状态
- iOS多线程-------线程的状态
- 网络多线程-线程的状态
- 多线程(3):线程的状态
- java多线程---线程的状态
- 多线程3-线程的状态
- Java多线程-线程的状态
- Java多线程-线程的状态
- java多线程之线程状态(2)
- java多线程之线程状态(3)
- mongodb学习系列之二
- 一个Demo说明白指针、地址、值得关系
- Problem C: 指针引出奇数因子
- android 动画-Tween Animation(一)动画体系简介,涉及到的核心类、核心接口讲解(下)
- OpenJDK垃圾收集器与内存分配策略
- 多线程之线程的状态
- 2016.1.20个人总结
- 反应器(Reactor)模式
- Matlab编程学习:用内建函数代替for循环
- LOMO特征
- Intellijidea建javaWeb以及Servlet简单实现, Java Servlet完全教程
- basemap and matplotlib
- 访微博作业
- Problem D: 使用指针访问数组元素--程序填空