我有一个变量声明为:
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 是否重要?
欢迎任何意见。
火星
最佳答案
最简单的是使用同步列表:
将您的列表包含在 Collections.synchronizedList(list) 中
private static List<String> _search_result_list = Collections.synchronizedList(new ArrayList<String>(15));
如果读取次数多于写入次数,则使用 CopyOnWriteArrayList .
关于java线程架构和应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179211/