2014-09-01 49 views

回答

0

如果線程在睡眠之前沒有獲得任何鎖,它將不會保留任何鎖。如果有,那麼YES,sleep()不會給正在等待獲取睡眠線程已獲取鎖定的對象鎖定的任何其他線程。

因此,sleep()只是將線程休眠指定的時間,並且鎖定已獲取(如果獲取)鎖定狀態下的所有鎖定。

+0

所以它可能會減慢性能....對吧? – 2014-09-01 19:04:08

+0

也許你需要一些'放緩',這就是爲什麼你使用'sleep()'。 – 2014-09-01 19:05:35

1

sleep()wait()之間的主要區別是wait()釋放鎖或監視器,而sleep()在等待時不釋放任何鎖或監視器。等待用於線程間通信,而睡眠用於暫停執行。

Thread.sleep()保持它已經獲得的監視器(如果有的話)。

Object.wait()發送當前線程(請注意,它適用於對象)爲「不可運行」狀態,像Thread.sleep(),但同樣wait()被稱爲上的對象,而不是一個線程。由於對象是鎖,並且線程對象當前處於「非運行狀態」,所以鎖被釋放。

+0

迄今爲止最好的答案。 1+ – 2014-09-01 19:05:33

+0

謝謝親愛的。我真的從你的答案中得到了一些新的東西。 – 2014-09-01 19:09:01

相關問題