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

时间:2014-10-19 12:50:55

标签: java concurrency threadpool runnable java.util.concurrent

我有一个非线程安全的对象,我在执行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?

1 个答案:

答案 0 :(得分:0)

这样可以将此问题标记为已回答:

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