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