java线程架构和应用程序设计

时间:2010-11-14 19:27:21

标签: java multithreading thread-safety

我有一个变量声明为:

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 个答案:

答案 0 :(得分:2)

最简单的方法是使用同步列表:

  1. Collections.synchronizedList(list)

    中包裹您的列表
    private static List<String> _search_result_list = 
             Collections.synchronizedList(new ArrayList<String>(15));
    
  2. 如果您使用的读取次数多于使用CopyOnWriteArrayList而不是写入次数。

答案 1 :(得分:0)

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