线程的状态

Posted 风过无痕的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的状态相关的知识,希望对你有一定的参考价值。

线程的状态

 

 

线程被创建时,属于新建状态,调用start后进入就绪状态

就绪状态被cpu调用时,进入运行状态

运行状态在调用sleep、wait、join后会进入阻塞状态

运行状态执行完成后会进入死亡状态,这里包括正常执行完毕和异常执行完毕

运行状态在os切换时,线程会进入就绪状态

线程wait进入阻塞状态,被调用notify之后,会进入就绪状态

线程sleep进入阻塞状态,时间过后会进入就绪状态

当前线程的子线程join之后,当前线程进入阻塞状态,在子线程死亡之后,当前线程进入就绪状态

阻塞状态的线程,被中断之后会进入死亡状态

 

线程相关的一些方法解析

sleep

详细描述:

Thread类的静态方法

public static native void sleep(long millis) throws InterruptedException; 

使当前线程睡眠n毫秒,线程从运行状态进入阻塞状态,n毫秒之后重新进入就绪状态,继而进入运行状态

进入阻塞状态后可以被中断

被调用t.interrupt()之后,该线程会被中断,sleep方法处抛出InterruptedException,捕获之后可以做相应处理

 

join

Thread类的非静态方法

 

public final void join() throws InterruptedException

使用举例:

Thread t = new Thread();

t.start();

t.join();

这里定义主线程main,子线程t

main调用t.join之后会进入阻塞状态,等待t线程的完结,t完结之后,main线程进入就绪状态

main线程在调用t.join之后,也可以被interrupt()中断。

 

yield

Thread类的非静态方法

public static native void yield();

当前线程主动让出cpu,从运行状态进入就绪状态,这个动作并不是立即执行的

 

interrupt

Thread类的非静态方法

public void interrupt()

线程对象调用interrupt之后,会从阻塞状态退出来,并抛出InterruptedException异常

 

wait

Object类的方法

public final void wait() throws InterruptedException

使用举例

Object obj;

obj.wait();

此方法必须在同步块中调用,wait之后线程进入阻塞状态,当是不会释放对象的锁

被调用interrupt()之后,该线程会被中断,抛出InterruptedException

 

notify

Object类的方法

public final native void notify()

Object obj;

obj.notify();

此方法会唤醒在对象obj上wait的线程,只会唤醒一个

 

notifyAll

Object类的方法

public final native void notifyAll();

Object obj;

obj.notifyAll();

此方法会唤醒在对象obj上wait的所有线程

 

以上是关于线程的状态的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程-线程的状态和线程常用方法

多线程-线程状态

Java多线程:线程状态

多线程状态及线程池管理

多线程(三):线程的状态

不知如何判断线程的状态