NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(test) object:nil];
[thread start];
线程的状态(生命周期)可分为以下几步:
- New : 通过alloc分配内存空间,创建线程
- start(执行)后: 线程处于Runnable(就绪状态), 此时线程对象会存放在缓存中可调度线程池中, 等待CPU调度:
Runnable状态
- start(执行)后: 线程处于Runnable(就绪状态), 此时线程对象会存放在缓存中可调度线程池中, 等待CPU调度:
- 当CPU调度了当前线程时: 线程处于Running(运行)状态, 执行线程中的任务
- CPU调度其他线程: 线程再次回到Runnable(就绪)状态, 等待CPU下一次调度
- 当调用了sleep方法/等待同步锁(即线程阻塞): 线程处于Blocked(阻塞)状态, 这时线程会被移出可调度线程池, 存放于内存中
Blocked状态
- 当调用了sleep方法/等待同步锁(即线程阻塞): 线程处于Blocked(阻塞)状态, 这时线程会被移出可调度线程池, 存放于内存中
- sleep结束/得到同步锁(线程阻塞完毕): 线程再次添加进可调度线程池,处于Runnable状态, 等待CPU调度
再次处于Runnable状态
- sleep结束/得到同步锁(线程阻塞完毕): 线程再次添加进可调度线程池,处于Runnable状态, 等待CPU调度
- Dead(死亡)状态: 指线程任务执行完毕、异常或者强制退出时的线程状态, 这时会首先将线程移出可调度线程池, 然后销毁线程对象, free线程内存空间
线程的完整生命周期
从上图可以看出, 我们可以控制线程声明周期中的大部分状态, 除了Running状态, Running是需要等待CPU去调度才能实现的.











网友评论