4、线程的生命周期

一、线程有哪六种状态?

1、六种状态

  • New
    • 表示已创建还没启动的新线程。通俗的来说就是我们使用Thread thread = new Thread(),还没调用start方法的线程。
  • Runnable
    • 一旦调用start方法,线程便会进入runnable(可运行的)状态,即可以值线程运行的状态,也可以值线程准备好了可运行的状态。
  • Blocked
    • 当一个线程进入到被synchronized修饰的代码块的时候,并且该锁已经被其他的线程拿走了,也就是该monitor已经被其他线程拿走了,我们拿不到这个monitor的时候,线程的状态就是Blocked
    • 这个Blocked仅仅是针对synchronized这个关键字才能进入blocked,因为和synchronized关键字起到相同作用的还有其他的lock,但是哪些情况下绝对不是blocked的状态。
    • Waiting
    • Object.wait()
    • Thread.join()
    • Locksupport.park()
  • Timed waiting
    • Thread.sleep(time)
    • Object.wait(time)
    • Thread.join(time)
    • Locksupport.parkNanos(time)
    • LockSupport.parkUntil(time)
  • Terminated
    • 线程自然的执行完
    • 出现一个没有被捕获的异常,导致这个方法意外终止。

2、六种状态的其他说明

  • Timed waiting和waiting的区别就是加了时间参数,除了可以等待唤醒的信号外,也可以等待时间到被唤醒。
  • Timed waiting和waiting看起来和blocked这种有点相似,区别在于blocked等待另外的线程释放一个排它锁,而Timed waiting和waiting是等待被唤醒。

3、线程六种状态示例图

4、什么是阻塞状态

  • 一般而言,把blocked(被阻塞)、waiting(等待)、timed_waiting(计时等待)都成为阻塞状态。
  • 不仅仅是blocked

二、说明

本文为学习慕课网悟空老师的课程《线程八大核心+Java并发底层原理精讲》笔记,文章为原创,知识点为老师所讲,有兴趣可以购买悟空老师的课程学习,支持知识付费,笔记如果有误希望大家指正,谢谢。

猜你喜欢

转载自www.cnblogs.com/zlandlsy/p/12899831.html