//
// ViewController.m
// 04-了解-线程的状态
//
// 创建线程是处于新建状态,start是就绪状态,会放入到可调度线程池里面(cpu看线程是否可以调用,是看线程是否在可调度线程池里面),cpu调度他的时候就会进入运行状态,当这个线程的时间片用完之后,进入就绪状态。所以调用了start方法之后,线程会在运行状态和就绪状态之间进行来回的切换。当线程调用sleep方法时候会进入阻塞状态,进入阻塞状态的线程是不可以工作的,进入阻塞状态时候线程会从可调度线程池里面移除出来到内存里面。此时这个线程还存在只不过cpu不会调用他而已,当sleep时间到了之后,会又移入可调度线程池中进入就绪状态,当cpu调用的时候又会进入运行状态。
// 当线程里面的任务执行完或者异常退出了之后进入死亡状态,死亡会移除可调用线程池,并且从内存释放,不会做任何事情不要想着重新启动线程。 #import "ViewController.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//1.创建线程,新建状态,
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
//2.启动线程,就绪状态,放入可执行线程池里面。<---->运行
[thread start];
} -(void)run //run方法执行完毕是死亡状态。
{
NSLog(@"run----%@",[NSThread currentThread]); //阻塞线程
[NSThread sleepForTimeInterval:2.0];//睡2秒,进入阻塞状态,移除可执行线程池。不能执行任何操作。
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];//睡3秒,进入阻塞状态,移除可执行线程池。不能执行任何操作。
NSLog(@"end---");
} -(void)task
{
for (NSInteger i = ; i< ;i++) {
NSLog(@"%zd---%@",i,[NSThread currentThread]); if (i == ) {
[NSThread exit]; //退出当前线程,死亡状态。不要想着重新启动线程。
break; //break退出任务,表示任务已经执行完毕,线程也死亡了。
}
}
} @end

最新文章

  1. Open Cascade Data Exchange STL
  2. linux 下 oracle 11g r2 的卸载
  3. Uxf框架引入Rest控制器特性
  4. struts2 标签的使用之二 s:iterator
  5. Convert.ToString和ToString的区别
  6. poj2409 Let it Bead
  7. 自己定义View之绘制圆环
  8. 非root启动80端口
  9. [搬运] DotNetAnywhere:可供选择的 .NET 运行时
  10. JAVA对象克隆
  11. PPTP服务端与客户端 修改默认PPTP默认端口1723
  12. centos6.5部署redmine3.2
  13. 运行里用\\加IP地址访问远程主机和用mstsc登录远程主机有什么区别??
  14. 在eclipse中安装go编辑器阅读fabric代码
  15. leetcode-876 Middle of the Linked List
  16. bzoj2152: 聪聪可可 树分治
  17. k:特殊的线性表—队列
  18. 第107天:Ajax 实现简单的登录效果
  19. 实用Linux命令
  20. 使用neon 开发nodejs addon

热门文章

  1. Libjingle 库
  2. 【project】十次方-01
  3. python第一章计算机基础
  4. poj 1088 滑雪 DP(dfs的记忆化搜索)
  5. 大数据平台消息流系统Kafka
  6. 51中xdata,idata,data,pdata的区别
  7. SIGPIPE 13 和其他信号的对照表
  8. JavaEE JDBC 了解JNDI
  9. MySQL Workbench基本操作
  10. windows PHP配置随笔