美文网首页
iOS开发 --- 线程状态

iOS开发 --- 线程状态

作者: 那时J花开 | 来源:发表于2018-06-06 15:55 被阅读0次
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(test) object:nil];
    [thread start];

线程的状态(生命周期)可分为以下几步:

    1. New : 通过alloc分配内存空间,创建线程
    1. start(执行)后: 线程处于Runnable(就绪状态), 此时线程对象会存放在缓存中可调度线程池中, 等待CPU调度:
      Runnable状态
    1. 当CPU调度了当前线程时: 线程处于Running(运行)状态, 执行线程中的任务
    1. CPU调度其他线程: 线程再次回到Runnable(就绪)状态, 等待CPU下一次调度
    1. 当调用了sleep方法/等待同步锁(即线程阻塞): 线程处于Blocked(阻塞)状态, 这时线程会被移出可调度线程池, 存放于内存
      Blocked状态
    1. sleep结束/得到同步锁(线程阻塞完毕): 线程再次添加进可调度线程池,处于Runnable状态, 等待CPU调度
      再次处于Runnable状态
    1. Dead(死亡)状态: 指线程任务执行完毕、异常或者强制退出时的线程状态, 这时会首先将线程移出可调度线程池, 然后销毁线程对象, free线程内存空间
线程的完整生命周期

从上图可以看出, 我们可以控制线程声明周期中的大部分状态, 除了Running状态, Running是需要等待CPU去调度才能实现的.

相关文章

网友评论

      本文标题:iOS开发 --- 线程状态

      本文链接:https://www.haomeiwen.com/subject/ujibsftx.html