【发布时间】:2019-10-18 13:07:37
【问题描述】:
细节问题
在使用数据结构时是否会导致任何问题,例如ArrayBlockingQueue<ArrayList<MyClass>>
多线程?
背景
在高层次上,我正在努力实现我有一个制作人来制作一个巨大的列表。为了加快处理速度。我决定使用多个消费者(线程)来消费生产者产生的巨大列表。
我的建议解决方案
我会将巨型列表转换为多个相对较小的列表,为了确保其线程安全,我会将这些较小的列表排入并发数据结构。因此,在多线程场景中,每个线程只需轮询并发队列以获取一个列表并对其进行处理。
问题陈述
在多线程场景中,我知道我们必须使用并发数据结构来避免线程干扰并建立happens-before关系。
但是使用非线程安全的数据结构作为线程安全数据结构的元素会安全吗?
在使用数据结构时会导致任何问题,例如
ArrayBlockingQueue<ArrayList<MyClass>>
有多个线程?- 对性能有影响吗?
【问题讨论】:
-
欢迎任何帮助/建议!
-
您是否考虑过将单个
MyClass元素逐个排入队列?也许你的制作人不需要这样建立庞大的列表? -
@Thilo 。感谢您提出此解决方案。对于我的用例,我将只有有限数量的线程作为消费者。因此,即使将个人 `MyClass` 排入队列,它会降低性能吗?并发数据结构内部使用可重入锁,可能一个线程在短时间内阻塞另一个线程。所以如果我使用`ConcurrentQueue
- >`,那么我可以减少不同线程和共享变量之间的交互。
标签: java multithreading concurrency thread-safety