线程thread的状态迁移

线程thread的状态迁移public enum State { /** * 尚未启动的线程的线程状态 */ NEW, /** *可运行线程的线程状态。

大家好,欢迎来到IT知识分享网。

public enum State {

/** * 尚未启动的线程的线程状态 */

NEW,

/** *可运行线程的线程状态。可运行线程中的线程 *状态正在Java虚拟机中执行,但它可能 *正在等待来自操作系统的其他资源 *例如处理器 */

RUNNABLE,

/** *线程的线程状态被阻塞,等待监视器锁定。 *处于阻塞状态的线程正在等待监视器锁定 *输入同步块/方法或 *调用后重新输入同步块/方法 * {@link Object#wait()Object.wait}。 */

BLOCKED,

/** * 等待线程的线程状态。 *线程由于调用其中之一而处于等待状态 *以下方法: * <ul> * <li> {@ link Object#wait()Object.wait}无超时</ li> * <li> {@ link #join()Thread.join}没有超时</ li> * <li> {@ link LockSupport#park()LockSupport.park} </ li> * </ ul> * * <p>处于等待状态的线程正在等待另一个线程 *执行特定操作。 * *例如,一个调用了<tt> Object.wait()</ tt>的线程 *在对象上正在等待另一个线程调用 * <tt> Object.notify()</ tt>或<tt> Object.notifyAll()</ tt> *那个对象。 名为<tt> Thread.join()</ tt>的线程 *正在等待指定的线程终止。 */

WAITING,

/** *具有指定等待时间的等待线程的线程状态。 *线程由于调用了以下之一而处于定时等待状态 *以下方法具有指定的正等待时间: * <ul> * <li> {@ link #sleep Thread.sleep} </ li> * <li> {@ link Object#wait(long)Object.wait}超时</ li> * <li> {@ link #join(long)Thread.join}超时</ li> * <li> {@ link LockSupport#parkNanos LockSupport.parkNanos} </ li> * <li> {@ link LockSupport#parkUntil LockSupport.parkUntil} </ li> * </ ul> */

TIMED_WAITING,

/** *终止线程的线程状态。 *线程已完成执行。 */

TERMINATED;

}

上面的源码,我使用翻译软件进行了翻译,其实方法也给出了状态迁移的条件:

线程thread的状态迁移

1.start()

一个线程只能start一次。主要是通过调用native start0();

2.run()

run()方法是不需要用户来调用的,当通过start方法启动一个线程之后,当该线程获得了CPU执行时间,便进入run方法体去执行具体的任务。

3.sleep()

sleep相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。

但是有一点要非常注意,sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象。

4.join()

join()实际是利用了wait(),只不过它不用等待notify()/notifyAll(),且不受其影响。它结束的条件是:1)等待时间到;2)目标线程已经run完(通过isAlive()来判断)。

5.interrupt()

此操作会将线程的中断标志位置位,至于线程作何动作那要看线程了。

6. suspend()/resume()

挂起线程,直到被resume,才会苏醒。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/44204.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信