java - 3个线程可以访问java中的1个对象

标签 java multithreading

我想创建一个静态 arrayList 用于 3 个线程之间的通信: 1. 线程将向列表添加一些数据; 2. 线程将从列表中删除数据; 3.线程(每3秒定时器)将检查列表的大小是否等于0,如果不等于则打印该列表的所有对象。

我想知道如果超过 1 个线程尝试同时访问此列表会发生什么(例如,当第二个线程从列表中删除对象时,计时器将同时检查列表的大小)。 我想我必须同步这个列表,但不知道该怎么做。你能给我一些建议吗?

最佳答案

I'm wondereing what would happen if more than 1 thread will try to access this list at same time

首先,ArrayList不是线程安全的,因此您不应该直接使用它。

一种可能性是使用Collections.synchronizedList(...);,它为您提供线程安全性,但会妨碍并发性。

您的要求似乎像一个Queue,因此您应该使用BlockingQueue,例如线程安全的LinkedBlockingQueue

注意:

如果您使用Collections.synchronizedList(...),列表上的复合操作仍然不安全。

关于java - 3个线程可以访问java中的1个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383477/

相关文章:

java - AutoValue 无法解析为类型 - Eclipse

java - 如果我在 cq5 Web 应用程序中有多个调度程序,谁充当负载均衡器?

java - java 中使用 hashmap 的替代 for 循环

c# - 在 C# 中模拟撕裂双

java - Java急切的单例创建线程安全吗?

具有 IoT 中心触发器的 Java Azure 函数未启动

java - 如何修复我的 Android Soundboard 应用程序的 "Google Mobile Ads SDK was initialized incorrectly"

c - C中的多线程搜索

Java 并发实践 list 3.1

JAVAFX : Thread Stop/Start