gpt4 book ai didi

java - Java中高效的多线程数组构建

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:06 24 4
gpt4 key购买 nike

我有很多线程将类似结果的对象添加到数组中,并希望通过删除同步来提高这方面的性能。

为此,我希望每个线程将它们的结果发布到 ThreadLocal 数组 - 然后一旦处理完成,我就可以为下一阶段组合数组。不幸的是,为此目的,ThreadLocal 有一个明显的问题:我无法在最后组合这些集合,因为没有线程可以访问另一个线程的集合。

我可以通过在创建时将每个 ThreadLocal 数组添加到 ThreadLocal 旁边的列表中来解决这个问题,因此我稍后可以使用所有列表(这将需要同步,但每个线程只需要发生一次) ,但是为了避免内存泄漏,我将不得不以某种方式让所有线程在最后返回以清理它们的 ThreadLocal 缓存......我更希望添加结果的简单过程是透明的,并且不需要任何除了简单地添加结果之外,还要跟进工作。

是否有编程模式或现有的类似 ThreadLocal 的对象可以解决此问题?

最佳答案

您是对的,ThreadLocal 对象被设计为可供当前线程访问。如果你想跨线程通信,你不能使用 ThreadLocal 而应该使用线程安全的数据结构,例如 ConcurrentHashMapConcurrentLinkedQueue .

对于您所描述的用例,在您的线程之间共享一个 ConcurrentLinkedQueue 并让它们根据需要全部写入队列将非常容易。一旦它们全部完成(Thread.join() 将等待它们完成),您可以将队列读入您需要的任何其他数据结构。

关于java - Java中高效的多线程数组构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36995926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com