我目前正在开发一个osgi框架,并且遇到了一个问题:
当你实例化一个类的多个实例时(例如通过工厂),它将创建任务并将它们提供给源自同一个线程池的workerthreads,我是否需要从那些实例调用Threadpool Threadsafe ?
编辑这是我的ThreadPool代码:
public class JournalThreadPool{ private static ExecutorService executor; private JournalThreadPool(){ } public static ExecutorService getUniqueInstance(){ if(executor == null) executor = Executors.newCachedThreadPool(); return executor; } }
我有多个创建任务的线程,并将任务分配给此ThreadPool中的一个线程,如下所示:
JournalThreadPool.getUniqueInstance().execute(RunnableTask);
这会产生冲突吗?例如,当2个线程试图同时执行他们的任务时?
答案 0 :(得分:1)
您只需要使共享的,可变的数据线程安全。
我建议你避免让构造函数共享任何可变数据,你就不会有问题。
如果您有这样的共享数据,我建议您通过线程安全方法访问数据,即不要直接访问数据。
答案 1 :(得分:0)
乍一看,所有这些都取决于您的工厂是否在所有呼叫之间有共同的共享数据(例如numberOfEntities)。如果您的工厂没有竞争条件或产生工人的代码,那么您就是安全的。
如果您提供更多代码,我们可以进一步发表评论......