Java 線程狀態blocked 和 waiting 的區別

Java 線程狀態blocked 和 waiting 的區別

BLOCKED狀態

線程處於BLOCKED狀態的場景
當前線程在等待一個monitor lock,比如等待執行synchronized代碼塊或者使用synchronized標記的方法。
在synchronized塊中循環調用Object類型的wait方法
下面展示一些 樣例

synchronized(this)
{
	while (flag)
	{
		obj.wait();
	}
// some other code
}

WAINTING狀態

線程處於WAITING狀態的場景。

調用Object對象的wait方法,但沒有指定超時值。
調用Thread對象的join方法,但沒有指定超時值。
調用LockSupport對象的park方法。

TIME_WAINTING狀態

線程處於TIMED_WAITING狀態的場景。

調用Thread.sleep方法。
調用Object對象的wait方法,指定超時值。
調用Thread對象的join方法,指定超時值。
調用LockSupport對象的parkNanos方法。
調用LockSupport對象的parkUntil方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章