gpt4 book ai didi

java - 使用 ThreadPoolExecutor 在同一线程中的 Runnable 实例之间共享数据

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:04 24 4
gpt4 key购买 nike

我有一个在执行 Runnable 时使用的非线程安全对象。然而,这个对象的创建成本很高,并且在每个 Runnable 中创建它们会导致太多的开销。相反,我希望 ThreadPoolExecutor 使用我的自定义线程,该线程有一个额外的字段,并在同一线程中运行的 Runnable 实例之间共享该字段。

我创建了具有自定义字段的自定义 Thread 类。我像这样创建 ThreadPoolExecutor:

executor = new ThreadPoolExecutor(5, 50, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new CustomThreadFactory())

CustomThreadFactory 在 newThread(Runnable r) 方法中创建我的自定义线程。但是,为了在 Runnable 实例中使用该字段,我还需要创建自定义 Runnable,它获取非线程对象的引用并将其保存以便在 run() 方法中使用。

但是,由于 ThreadPoolExecutor 使用 Workers 来执行 Runnable 实例,因此我无法将非线程安全对象调用到 Runnable 实例。有没有任何方便的方法可以使用 ThreadPoolExecutor 执行此类操作,或者我是否需要创建自定义 ThreadPoolExecutor?

最佳答案

只是为了将此问题标记为已回答:

如果没有其他原因让您使用自定义线程工厂(例如提供自定义线程名称),那么 ThreadLocal 是首选方式。它完全符合您对想要实现的目标的描述。

关于java - 使用 ThreadPoolExecutor 在同一线程中的 Runnable 实例之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450712/

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