2013-07-17 112 views
1

我目前正在研究一个osgi框架,并且遇到了一个查询点:多线程实例访问时是否是线程池线程安全?

当您实例化一个类的多个实例时(例如通过工厂),它将创建任务并将它们提供给workerthreads来源在同一个线程池中,我是否需要从这些实例调用该线程池线程安全?

编辑这是我的线程池代码:

 

    public class JournalThreadPool{ 

     private static ExecutorService executor; 

     private JournalThreadPool(){ 
     } 

     public static ExecutorService getUniqueInstance(){ 
      if(executor == null) 
       executor = Executors.newCachedThreadPool(); 
      return executor; 
     } 
    } 

我还有谁创建任务多线程和任务,从这个线程池分配给一个线程像这样:

 

    JournalThreadPool.getUniqueInstance().execute(RunnableTask); 

这会产生冲突吗?例如,当2个线程试图同时执行他们的任务时?

+2

评论未知代码的线程安全性是完全不可能的。告诉我们你的代码。 –

+0

我还没有写任何代码,我基本上需要知道是否需要同步调用:ExecutorService.execute(workerThread)当这个调用将来自多个实例(以多线程方式)。 – Don

回答

1

你只需要进行共享,可变数据线程安全的。

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

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

0

乍一看不,但所有这一切都取决于您的工厂是否在所有调用(例如numberOfEntities)之间都有一个共同的共享数据。如果你的工厂没有竞争条件,或者代码繁衍了工人,那么你是安全的。

如果你提供更多的代码,我们可以进一步的评论....