Q
Java同步塊
1
A
回答
1
是的,這是完全有效的,但通過這樣做你會得到什麼?此外,線程鎖定對象實例而不是保存對象引用的變量,因此即使您將某個其他實例重新賦值list
,當前線程也已鎖定上一個對象。
爲了說明更多,假設list
被分配了值val1
。然後,thread1
呈現val1
鎖(這是由可變list
指出),現在其他線程不能採取鎖val1
(因爲它們是在參考list
等待鎖在實例val1
沒有),即使thread1
已重新實例化list
。
更好的辦法是清除塊內的list
而不是重新初始化它。
5
當編寫
synchronized (list)
鎖是對象,不是變量/場list
。
如果你
synchronized (list) {
list = new ArrayList<>();
}
要創建一個新的對象,並重新分配一個變量/場 - 但你並沒有改變鎖 - 鎖仍是同一個對象以前。
相關問題
- 1. 同步塊 - Java
- 2. Java同步寫塊
- 3. 同步和java中的同步塊
- 4. Java線程和同步塊
- 5. Java - 同步方法/塊
- 6. Java線程:同步塊
- 7. Java - 同步對象/塊
- 8. Java:嵌套同步塊
- 9. java線程同步塊
- 10. 的Java happend,前同步塊
- 11. Java同步函數工作,同步塊不工作
- 12. Clojure STM(dosync)x Java同步塊
- 13. 同步塊上的Java線程鎖
- 14. Java:等待同步塊,誰先到?
- 15. Java同步塊不能正常工作
- 16. 微調Java同步塊行爲
- 17. 在Java中執行兩個同步塊
- 18. Java - 同步塊上的字節[]
- 19. 塊級同步
- 20. 同步塊android
- 21. 同步塊
- 22. DispatchQueue同步塊VS異步塊
- 23. 在同步方法內同步(this)塊
- 24. 同步方法VS同步塊
- 25. 使用同步塊的同步隊列
- 26. 線程:同步塊
- 27. TwitterRequest塊同步IOS5
- 28. 同步塊鎖定
- 29. 同步代碼塊
- 30. java同步
我想通過另一個列表更新此列表。最好清除這個列表並添加全部內容?還有其他線程在這個列表上迭代。 –
@AkashMahajan是的,理想情況下這應該是方法。 –