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

标签 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 是否重要?

欢迎任何意见。

火星

最佳答案

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

  1. 将您的列表包含在 Collections.synchronizedList(list)

    private static List<String> _search_result_list = 
             Collections.synchronizedList(new ArrayList<String>(15));
    
  2. 如果读取次数多于写入次数,则使用 CopyOnWriteArrayList .

关于java线程架构和应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179211/

相关文章:

java - 距离 vector 的实现没有找到新路径

JavaMail 类NotFoundException

java - 如何在 Kotlin 中创建空类对象?

java - 堆栈跟踪中的神秘行

.net - 中止阻塞线程

java - JVM字符串池线程是本地的吗?它会导致此用例出现任何问题吗?

java - `obj` 中的 `synchronized(obj) {...}` 参数的目的是什么?

eclipse - Eclipse中的Java进程问题

java - java程序中线程的字数统计

c - 假设没有 “lend”,将 “concurrent access”内存块安全地锁定到C中的另一个线程