我有一个变量声明为:
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也是如此?
赞赏任何意见。
火星
答案 0 :(得分:2)
最简单的方法是使用同步列表:
在Collections.synchronizedList(list)
中包裹您的列表private static List<String> _search_result_list =
Collections.synchronizedList(new ArrayList<String>(15));
如果您使用的读取次数多于使用CopyOnWriteArrayList而不是写入次数。
答案 1 :(得分:0)
public void addData(String data) {
synchronized(_search_result_list) {
_search_result_list.add(data);
}
}