java线程状态及转换
Posted 乐之者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程状态及转换相关的知识,希望对你有一定的参考价值。
java线程有6种状态:
新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated
1.限时等待timed waiting :处于这种状态的线程不会被分配cpu执行时间。不过无须等待被其他线程显式地唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进行限时等待状态:
a. Thread.sleep()方法;
b. 设置了Timeout参数的Object.wait()方法;
c. 设置了Timeout参数的Thread.join()方法;
d. LockSupport.parNanos()方法;
e. LockSupport.parkUntil()方法。
2.无限期等待Waiting :处于这种状态的线程不会被分配cpu执行时间。它们要等待被其他线程显式地唤醒。
以下方法会让线程进入无限期的等待状态:
a. 没有设置Timeout参数的Object.wait()方法。
b. 没有设置Timeout参数的Thread.join()方法。
c. LockSupport.park()方法。
3.阻塞 Blocked :线程被阻塞了。"阻塞状态"与"等待状态"的区别,"阻塞状态"在等待着取到一个排他锁,这个事件将在另外一个线程放弃这个锁的时候发生。"等待状态"则是等待一段时间,或者唤醒动作的发生。在程序等待进入同步区域的时候,
线程将进入这种状态。
线程状态的转换如下:
参考资料:《深入理解java虚拟机》
以上是关于java线程状态及转换的主要内容,如果未能解决你的问题,请参考以下文章
Java 并发 -- 线程状态(Java线程六种状态操作系统层次的五种状态)线程池(七大核心参数)wait vs sleep
Java 并发 -- 线程状态(Java线程六种状态操作系统层次的五种状态)线程池(七大核心参数)wait vs sleep