2010-11-14 78 views
1

我有一個變量聲明爲:Java線程架構和應用設計

private static List<String> _search_result_list = new ArrayList<String>(15); 

在這個程序中,有一系列連接到不同的服務器,並從供給線的URL數據的線程。線程獲取URL的結果,將它們轉換爲文本,並將它們存儲在_search_result_list中。我的問題是關於同步線程訪問_search_result_list。什麼是最好的方式去做這件事?

此外,線程不是與_search_result_list在同一個類中創建的,實際上不能訪問_search_result_list的封閉類。將_search_result_list指針傳遞給創建線程的類是否足夠,然後讓該類爲每個線程提供一個指向_search_result_list的指針。這是否需要同步?或者,如果線程試圖同時寫入ArrayList,那麼這是否還需要考慮?

任何輸入表示讚賞。

火星

回答

2

最簡單的方法是使用同步列表:

  1. 總結你的列表中Collections.synchronizedList(list)

    private static List<String> _search_result_list = 
         Collections.synchronizedList(new ArrayList<String>(15)); 
    
  2. 如果您有更多讀取比大於寫使用CopyOnWriteArrayList

0
public void addData(String data) { 
    synchronized(_search_result_list) { 
     _search_result_list.add(data); 
    } 
} 
+0

我認爲這種方法也可以。 – Mars 2010-11-14 23:20:04