簡單的問題,但我沒有多線程的經驗。 如果兩個線程使用相同的同步方法(在Java中),並在給定的時間第一個線程不能訪問方法(因爲第二個是使用它),做了一段時間,然後嘗試的第一個線程等待(凍結)再次訪問它,還是隻是放棄,根本不訪問它?訪問java中的同步方法
回答
第一種方法的塊,並等待直到當一個線程正在執行的對象同步方法,它可以使用的方法,具體根據doc
,即調用的同步方法的所有其他線程相同的對象塊(掛起執行)直到第一個線程完成對象。
如果我沒有記錯的話,我並不是100%確定的,但如果內存爲我服務,那麼JVM不會保證線程在釋放後能夠獲取鎖的順序。
它等待。
JVM不允許兩個線程同時在同一個對象上同步。如果一個線程在第二個線程嘗試同步時已經同步,則第二個線程將進入睡眠狀態並添加到隊列中。
每當一個線程釋放一個鎖(即,當它從一個同步的方法或塊中退出時),該鎖的隊列頭部的線程將被喚醒,然後它將被允許鎖定該鎖。
你確定你最後一句話嗎? – assylias 2015-03-31 13:09:33
@assylias。我只能在JLS中找到它:「當執行線程擁有該鎖時,其他線程無法獲取該鎖。」一個高效和公平的實現要求將使用一個基於隊列的鎖,其行爲將如我所述。其他的實現可能會有不同的行爲,但是他們的行爲可能很難向noob解釋,而且在他的教育階段,這種差異可能並不是那麼重要。 – 2015-03-31 13:21:58
- 1. 線程訪問Java中的非同步方法
- 2. java中的方法同步
- 3. 如何在Java中正確同步方法訪問
- 4. 訪問靜態字段的Java同步和靜態同步方法
- 5. 訪談問:Java同步
- 6. Java CDI @ApplicationScoped同步/異步訪問
- 7. 從本機代碼訪問java同步方法
- 8. 無法訪問類中受保護的最終同步方法
- 9. Java的同步方法調用不同步方法
- 10. 實例方法JAVA中的同步
- 11. Java - 同步方法/塊
- 12. Java - 同步靜態方法
- 13. java方法同步對象
- 14. Java RMI方法同步
- 15. 爲什麼在此多線程程序中不同步訪問同步方法?
- 16. 的Java訪問方法
- 17. Java:多線程鏈表訪問同步
- 18. 兩個線程可以同時訪問同步方法嗎?
- 19. 如何訪問Java中不同類中方法的變量?
- 20. 同步訪問ArrayList
- 21. 多種方法之間的java同步
- 22. 跨實例同步對MDB方法的訪問
- 23. Java:訪問靜態方法
- 24. C#中的同步方法
- 25. 同步對SimpleDateFormat的訪問
- 26. Java同步問題
- 27. 同步方法
- 28. 在另一個同步方法中引用同步方法
- 29. 從異步方法訪問值onCreate()
- 30. 如何在java方法中訪問'this'?
一個很好的答案鏈接到文檔,並提出一個簡短的相關報價回答問題+1。 – Gnoupi 2015-03-31 13:10:49
^同意。感謝你的回答。我今天一直在這個頁面上看過4次,我沒有注意到這一點。我必須做更少的閱讀和更適當的閱讀。 另外,我只有2個線程,所以順序不是問題。 – JakeDiscBrake 2015-03-31 13:14:02