java线程6种状态转换,java6种线程状态
網上好多帖子把操作系統的線程狀態跟java的線程狀態混為一談,導致誤導了好多人;
現在根據java的Thread類來分析java的線程狀態;
java.lang.Thread內部枚舉State
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
通過源碼可以看到,java線程狀態共有6種,分別為NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED;
狀態分析
NEW
新建初始狀態,例如new Thread(),并且沒有調用start()方法;
RUNNABLE
可運行狀態,此時調用了start()方法,java線程中將操作系統中的就緒狀態(ready)和運行中狀態(running)統一歸類為可運行狀態(RUNNABLE)。
雖然該狀態的線程在jvm中是運行狀態,但可能處于等待操作系統cpu的調度。
BLOCKED
阻塞狀態,等待監視器鎖(monitor lock),表示線程阻塞于鎖;
觸發條件:
synchronized同步代碼塊
或synchronized同步方法
WAITING
等待狀態,進入該狀態的線程需要等待其它線程進行一些特殊操作,如notify、notifyAll、unpark;
觸發條件:調用下列任何一個方法
Object#wait()
join()
LockSupport#park()
TIMED_WAITING
超時等待狀態,該狀態與WAITING不同之處是在指定時間后可以自動喚醒到就緒狀態;
觸發條件:調用下列任何一個方法
sleep Thread.sleep
Object#wait(long)
join(long)
LockSupport#parkNanos
LockSupport#parkUntil
TERMINATED
終止狀態,表示該線程已執行完畢。
原文:https://www.cnblogs.com/xingxin666/p/11637341.html
總結
以上是生活随笔為你收集整理的java线程6种状态转换,java6种线程状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中jtansforms,java
- 下一篇: 牙周病引起口臭怎么办