我不確定我是否理解Java中的同步列表。假設我有以下幾點:同步列表如何工作?
List<Integer> numbers = Collections.synchronizedList(new ArrayList<Integer>());
// Assumption: This is running on a separate thread
public void add() {
numbers.add(new Random().nextInt(100));
}
// This is also running on a separate thread
public void doSomething() {
synchronized(numbers) {
for (int i : numbers) {}
}
}
基本上,將add()
能如果調用doSomething()
到號碼添加到列表中?如果我使用public synchronized void add()
和public synchronized void doSomething()
,會發生什麼?
我正在使用UDP套接字服務器,並且我打算將客戶端存儲在ArrayList
中。我會有多個線程可以讀取,寫入和修改這個列表。我該怎麼做?
我很困惑;否則別人會說。 –
@BrandonSmith - 我錯了,我改變了我的答案。 –
@BrandonSmith,這個答案清楚地解釋了你的代碼行爲,因爲在這兩種情況下,兩個操作在同一個對象上是同步的。 – techuser