@maohoo 线程的六种状态

 

查看Thread类的源码,可以看到其包含一个内部枚举State, 从而发现线程拥有六个状态:


(1)New : 新建;

线程刚刚被创建,但是并未被启动,即未调用start()方法。

(2)Runnable : 可运行;

可以在java虚拟机中运行的状态,但是它可能在运行自己的代码,也可能没有,这取决于操作系统处理器。

(3)Blocked :  被阻塞;

当一个线程试图获取一个内部的对象锁,而该对象锁被其他的线程持有,则该线程进入被阻塞状态。

(4)Waitting : 等待;

如果当前线程调用wait()方法,则当前线程进入Time waiting但是这个时候当前线程会释放所占有的JVM资源,进入这个状态过后是不能自动唤醒的,必须调用notify()或者notifyAll()方法,线程进入Waiting

(5)Timed_Waitting: 计时等待;

Object.wait、Thread.join、Lock.tryLock和Condition.await等方法有超时参数,还有Thread.sleep方法、LockSupport.parkNanos方法和LockSupport.parkUntil方法,这些方法会导致线程进入计时等待状态,如果超时或者出现通知,都会切换会可运行状态

(6)Terminated :  被终止;

因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡。



简易状态转换图:







猜你喜欢

转载自blog.csdn.net/maohoo/article/details/78214051