// 创建线程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
// 启动线程
[thread start];
线程池:存放线程的池子! 分为:
可调度线程池: CPU 只会调度可调度线程池中的线程! 下面蓝色状态都位于可调度线程池中! '就绪' ,'运行'!
不可调度线程池: 下面红色状态都位于不可调度线程池中! "新建" ,"阻塞" ,"死亡"!
线程状态:
start CPU调度当前线程 运行结束/强制退出(exit)
"新建" ---------->'就绪' -----------------> '运行' -----------------------> "死亡";
CPU 调度其他线程 CPU调度当前线程
'运行' ------------------> '就绪'-----------------> '运行'
调用 sleep/等待互斥锁 sleep时间到/得到互斥锁
'运行' -----------------------> "阻塞"-----------------------> '就绪';
线程运行结束或者强制退出(exit)就进入 "死亡" 状态;
"注意:一旦线程停止(死亡),就不可以再次开启任务!程序会挂掉: Crash!
平时开发中,要特别关注 Crash! :"PO"级别的 "Bug";
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
// 启动线程
[thread start];
线程池:存放线程的池子! 分为:
可调度线程池: CPU 只会调度可调度线程池中的线程! 下面蓝色状态都位于可调度线程池中! '就绪' ,'运行'!
不可调度线程池: 下面红色状态都位于不可调度线程池中! "新建" ,"阻塞" ,"死亡"!
线程状态:
start CPU调度当前线程 运行结束/强制退出(exit)
"新建" ---------->'就绪' -----------------> '运行' -----------------------> "死亡";
CPU 调度其他线程 CPU调度当前线程
'运行' ------------------> '就绪'-----------------> '运行'
调用 sleep/等待互斥锁 sleep时间到/得到互斥锁
'运行' -----------------------> "阻塞"-----------------------> '就绪';
线程运行结束或者强制退出(exit)就进入 "死亡" 状态;
"注意:一旦线程停止(死亡),就不可以再次开启任务!程序会挂掉: Crash!
平时开发中,要特别关注 Crash! :"PO"级别的 "Bug";