当多个实例访问时,线程池线程是否安全?

时间:2013-07-17 07:37:16

标签: java thread-safety

我目前正在开发一个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个线程试图同时执行他们的任务时?

2 个答案:

答案 0 :(得分:1)

您只需要使共享的,可变的数据线程安全。

我建议你避免让构造函数共享任何可变数据,你就不会有问题。

如果您有这样的共享数据,我建议您通过线程安全方法访问数据,即不要直接访问数据。

答案 1 :(得分:0)

乍一看,所有这些都取决于您的工厂是否在所有呼叫之间有共同的共享数据(例如numberOfEntities)。如果您的工厂没有竞争条件或产生工人的代码,那么您就是安全的。

如果您提供更多代码,我们可以进一步发表评论......