线程生命周期

线程生命周期

线程生命周期

上图展示了线程从创建到结束的整个生命周期,下面从状态和控制两个方面分解图中的内容

线程状态

线程具有5中基本的状态:

  1. NEW(新建状态): 创建线程,还未启动
  2. RUNNABLE(就绪状态): 可运行状态,但还未获得时间片,等待执行
  3. RUNNING(执行状态): 运行状态,在就绪状态获得了时间片,进入运行状态
  4. BLOCKED(阻塞状态):当某些情况下,线程被阻止运行,进入阻塞状态,阻塞的状态可分为三种:
    • 第一种为执行了wait()后会进入放入线程等待队列中,这种情况叫等待阻塞.
    • 第二种为等待获取synchronized()同步锁时,会讲线程放入同步锁队列中,等待前一个线程执行完synchronized中的内容,这种情况叫同步阻塞.
    • 第三种为执行了sleep()join()时,和wait()不同,它不会释放对象锁.
  5. TERMINATED(终止状态):当线程正常结束或异常退出时,会到达终止状态

线程方法

  • run/start
    需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run() 方法,这是由Java的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。
  • wait
    当前线程暂停执行并释放对象锁标志,让其他线程可以进入synchronized数据块,当前线程被放入对象等待池中
  • nodify/nodifyAll
    唤醒等待(wait)的线程
  • sleep
    休眠一段时间后,会自动唤醒。但它并不释放对象锁。也就是如果有 synchronized同步块,其他线程仍然不能访问共享数据。注意该方法要捕获异常
  • join
    当前线程停下来等待,直至另一个调用join方法的线程终止,线程在被激活后不一定马上就运行,而是进入到可运行线程的队列中
  • yield
    停止当前线程,让同等优先权的线程运行。如果没有同等优先权的线程,那么yield()方法将不会起作用
-------------本文结束感谢您的阅读-------------

本文标题:线程生命周期

文章作者:NanYin

发布时间:2020年03月29日 - 00:03

最后更新:2020年03月28日 - 19:03

原始链接:https://nanyiniu.github.io/2020/03/29/%E7%BA%BF%E7%A8%8B%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。