- 一個對象有兩個同步列表屬性(listA和listB)和一個名爲add(...)的方法,它將一個元素添加到這兩個列表中。我的問題是:如果從不同的線程調用此方法,該方法是否應該同步?
- 在同步方法中使用SwingUtilities.invokeLater方法時會出現問題嗎?
- 當使用synchronized(this){.. code ...}時,在這種情況下,當一個線程訪問代碼塊時,是否僅阻塞了對象(this)的代碼塊或所有方法?
Java同步
回答
實際上,synchronized方法和synchronized(this){}是一樣的,因爲「this」是指對象,而這個對象將提供鎖。如果使用這些同步中的任何一個,並且一個線程調用一個同步方法,則其他線程無法訪問該對象的所有同步方法。如果您想避免這種情況,請創建一個新變量來提供鎖定,而不是同步該方法。例如
public void add(String s)
{
private Object block = new Object();
synchronized(block)
{
listA.add(s);
listB.add(s);
}
}
public int count()
{
return listA.size(); //returns the most recent listA update size
// method can be accessed while another thread adds elements to listA
}
-
一個目的有兩個同步屬性列表(和listA的數組listB),並且將一個元素添加到這兩個列表一個 方法名爲add(...)。我的 的問題是:如果從 調用不同的線程,該方法是否應該同步?
這取決於。如果你想讓listA和listB中的元素順序相同,那麼是的,當你添加到兩個列表中時,你應該同步。否則,如果有可能,你得到的東西在這個順序:
- 線程A加元素listA的
- 線程B增加元素listA的
- 線程B增加元素數組listB
- 線程A增加元素數組listB
-
-
當在同步方法中使用方法SwingUtilities.invokeLater時,會出現問題 ?
-
當使用同步的(這){..代碼...},在此情況下,只有 代碼塊或對象的所有方法(本)當一個線程 訪問代碼塊時被阻塞?
沒有,有沒有異議。我真的不知道你認爲你可以得到什麼問題。
它禁止所有被同步(因爲這意味着相同synchronized (this)
和使用synchronized (this)
。 此外,所有碼塊的非靜態方法中,在其它類它阻止任何代碼,在同步。同一個對象 靜態方法和非同步方法不會阻止,而你在裏面synchronized (this)
謝謝,能否請你解釋一下靜態方法和同步的一種非靜態方法有什麼區別? – sch
- 1. Java同步器
- 2. Java同步-IllegalMonitorStateException
- 3. Java同步
- 4. java同步
- 5. 同步塊 - Java
- 6. JAVA同步
- 7. Java RMI同步
- 8. Java同步塊
- 9. Java同步鎖
- 10. Java同步
- 11. java和同步
- 12. 同步和java中的同步塊
- 13. Java同步方法...不同步
- 14. Java中同步方法ans同步塊
- 15. Java同步困境
- 16. Java同步寫塊
- 17. Java同步問題
- 18. Java同步語句
- 19. Java同步列表
- 20. Java同步問題
- 21. Java同步任務
- 22. Java同步對象?
- 23. Java同步/鎖定
- 24. Java同步混淆
- 25. Java線程「同步」
- 26. Java管道同步
- 27. Java同步問題
- 28. 同步在java中
- 29. Java地圖同步
- 30. Java同步處理
',對象具有兩個同步列表attributes'屬性不能在Java中同步 – CKing
我的意思是:。私人列表 listA的=集合.synchronized List(new ArrayList <>()); \t private列表 listB = Collections.synchronizedList(new ArrayList <>()); –
sch