【问题标题】:Is a Threadpool Threadsafe when accessed by mutliple instances?当多个实例访问时,线程池线程安全吗?
【发布时间】:2013-07-15 15:48:33
【问题描述】:

我目前正在开发一个 osgi 框架,并且遇到了一个查询点:

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

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

公共类 JournalThreadPool{ 私有静态 ExecutorService 执行器; 私人日记线程池(){ } 公共静态 ExecutorService getUniqueInstance(){ 如果(执行者 == 空) executor = Executors.newCachedThreadPool(); 返回执行者; } }

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

JournalThreadPool.getUniqueInstance().execute(RunnableTask);

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

【问题讨论】:

  • 评论未知代码的线程安全是不可能的。向我们展示您的代码。
  • 我还没有写任何代码,我基本上需要知道是否需要同步调用: ExecutorService.execute(workerThread) 当这个调用将来自多个实例时(以多线程方式)。

标签: java thread-safety


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多