簡體   English   中英

多個線程訪問數組

[英]multiple threads accessing array

我試圖跨多個線程使用arrayList,其中2個線程向其添加元素,一個線程只檢索第一個元素。 我知道我可以使用syncronizedList,但我想看看這個實現是否正確。 基本上我在同步方法中添加了所有的數組操作

public void synchronized addElem(String str){
  String s = str.trim();
  myArray.add(s);
 }

這個可以嗎?

同步寫入是不夠的,您還需要同步讀取。 否則,與write同時發生的讀取可能會返回不一致的數據,或觸發異常:

public synchronized String getFirst() {
    if (myArray.size() != 0)
        return myArray.get(0);
    return null;
}

您還可以使用Collections.synchronizedList

List<String> syncList = Collections.synchronizedList(new ArrayList<String>());

不需要。您需要在所有時間同步訪問列表,並確保不在其他地方傳遞任何引用。 這就是同步類存在的原因 - 為您節省成本。 這是答案的一部分,但還不夠。

您還可以將synchronized塊用作synchronized(myArray) { // logic} 如果您的方法太長並且將長時間保留所需對象,則優先於同步方法。 另一方面, synchronized塊只有在需要時才會保持對象鎖定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM