iOS多线程-生命周期

89 阅读1分钟

  • 新建
    • 内存中创建了一个线程对象
      NSThread *th1 = [[NSThread alloc] initWithTarget:self selector:@selector(threadDemo) object:nil];
  • 就绪
    • 将线程放进可调度线程池,等待被CPU调度
      [th1 start];
  • 运行
    • CPU负责调度 可调度线程池 中的处于 就绪状态 的线程
    • 线程执行结束之前,状态可能会在 就绪状态运行状态 之间来回的切换
    • 就绪状态运行状态 之间的状态切换由CPU来完成,程序员无法干涉
  • 阻塞
    • 正在运行的线程,当满足某个条件时,可以用休眠或者锁来阻塞线程的执行(此时该线程进入阻塞状态,也就是出了可调度线程池)
      • sleepForTimeInterval:休眠指定时长
        [NSThread sleepForTimeInterval:1.0];
      • sleepUntilDate:休眠到指定日期
        [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
      • 互斥锁(同步锁)
        @synchronized(self)
  • 销毁
    • 正常死亡:线程执行结束
    • 非正常死亡
      • 程序突然崩溃
      • 当满足某个条件后,在线程内部强制线程退出,调用exit方法