我已經聽說在java中的sleep(timeInMilliseconds)
方法持有鎖的對象,並進入休眠指定的時間。而且我還讀到它有機會讓其他線程在該休眠期執行? sleep()
方法如果能夠鎖定其他線程想要使用的對象,如何幫助其他線程?sleep()方法如何幫助其他線程執行,因爲它擁有該對象的鎖itselt?
回答
如果線程在睡眠之前沒有獲得任何鎖,它將不會保留任何鎖。如果有,那麼YES,sleep()
不會給正在等待獲取睡眠線程已獲取鎖定的對象鎖定的任何其他線程。
因此,sleep()
只是將線程休眠指定的時間,並且鎖定已獲取(如果獲取)鎖定狀態下的所有鎖定。
sleep()
和wait()
之間的主要區別是wait()
釋放鎖或監視器,而sleep()
在等待時不釋放任何鎖或監視器。等待用於線程間通信,而睡眠用於暫停執行。
Thread.sleep()
保持它已經獲得的監視器(如果有的話)。
Object.wait()
發送當前線程(請注意,它適用於對象)爲「不可運行」狀態,像Thread.sleep()
,但同樣wait()
被稱爲上的對象,而不是一個線程。由於對象是鎖,並且線程對象當前處於「非運行狀態」,所以鎖被釋放。
迄今爲止最好的答案。 1+ – 2014-09-01 19:05:33
謝謝親愛的。我真的從你的答案中得到了一些新的東西。 – 2014-09-01 19:09:01
- 1. Java線程sleep()的幫助
- 2. 錯誤:調用線程無法訪問此對象,因爲其他線程擁有它
- 3. ,因爲不同的線程擁有它
- 4. PHP pthreads:線程dosen't執行其他對象的方法async
- 5. 解鎖其他線程擁有的鎖java
- 6. 調用線程無法訪問此對象,因爲不同的線程擁有它。如何編輯圖像?
- 7. 非UI「因爲不同的線程擁有它調用線程不能訪問該對象」
- 8. 因爲不同的線程擁有它調用線程不能訪問該對象,WPF
- 9. PrintDialog類:因爲不同的線程擁有它調用線程不能訪問該對象
- 10. 如何確保異常「調用線程不能訪問此對象,因爲不同的線程擁有它」?
- 11. wpf綁定:調用線程無法訪問此對象,因爲不同的線程擁有它
- 12. TFS2012:調用線程無法訪問此對象,因爲不同的線程擁有它
- 13. c#tpl,繼續出現問題「調用線程無法訪問對象,因爲不同的線程擁有它」
- 14. WPF System.InvalidOperationException:調用線程無法訪問此對象,因爲不同的線程擁有它
- 15. 調用線程無法訪問此對象,因爲不同的線程擁有它
- 16. 調用線程無法訪問此對象,因爲不同的線程擁有它
- 17. InvalidOperationException:調用線程無法訪問此對象,因爲不同的線程擁有它。
- 18. 調用線程無法訪問此對象,因爲不同的線程擁有它在wpf
- 19. 調用線程無法訪問此對象,因爲不同的線程擁有它
- 20. 有什麼辦法殺死運行的線程死鎖的「http:8080-42」,它封鎖了所有其他線程
- 21. 使用除鎖定對象以外的其他鎖定線程
- 22. 調用線程不能訪問此對象,因爲不同的線程擁有
- 23. Java線程sleep()方法
- 24. 如何從doinbackground()執行其他線程()
- 25. 獲取對靜態對象的鎖應該阻塞其他請求線程?
- 26. 如何通過使用sleep()或其他方法使代碼緩慢執行?
- 27. 調用線程不能訪問這個對象,因爲不同的線程擁有它有錯誤
- 28. 如何執行其他類的方法
- 29. C#阻止從其他線程訪問所有對象方法
- 30. WPF TabControl的,因爲不同的線程擁有它
所以它可能會減慢性能....對吧? – 2014-09-01 19:04:08
也許你需要一些'放緩',這就是爲什麼你使用'sleep()'。 – 2014-09-01 19:05:35