1

我目前正在研究一个 osgi 框架,并遇到了一个查询点:

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

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

    公共类 JournalThreadPool{

        私有静态 ExecutorService 执行器;

        私人日记线程池(){
        }

        公共静态 ExecutorService getUniqueInstance(){
            如果(执行者 == 空)
                executor = Executors.newCachedThreadPool();
            返回执行人;
        }   
    }

我有多个线程创建一个任务,并将任务分配给这个 ThreadPool 中的一个线程,如下所示:

    JournalThreadPool.getUniqueInstance().execute(RunnableTask);

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

4

2 回答 2

1

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

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

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

于 2013-07-17T08:26:02.983 回答
0

乍一看没有,但所有这一切都取决于您的工厂是否在所有调用之间具有公共共享数据(例如 numberOfEntities)。如果您的工厂中没有竞争条件或产生工人的代码,那么您是安全的。

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

于 2013-07-17T07:44:01.627 回答