当前位置: 首页 > 知识库问答 >
问题:

当mutliple实例访问时,Threadpool是线程安全的吗?

汪德明
2023-03-14

    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个线程试图同时执行它们的任务时?

共有1个答案

苏宾鸿
2023-03-14

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

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

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

 类似资料:
  • 我们都知道查询不应该在UI线程上执行,但是,令人惊讶的是,我在官方文档中找不到有关类的线程安全性的信息。 我知道如何编写线程安全的,并且我知道默认情况下是线程安全的(它实现了内部锁定机制)。 但是,从多个线程使用的单个实例安全吗(例如,在同一对象上并行调用或?

  • 问题内容: 我有一个链表: 我将元素添加到线程1中的列表中,如下所示: 我正在第二个线程中从中检索元素,如下所示: 是否将其视为线程安全的?即使线程1和2都在修改列表,它们也只能在列表的开头或结尾进行修改,对吗? 如果不是,那么谁能指出我/ 附带的Java API中的类,并且肯定是线程安全的? 先感谢您。 顺便说一句:我不会访问/ 。 问题答案: LinkedList不是线程安全的。您必须自己锁定

  • 我有一个应用程序,它有一个ConcurrentHashMap本地存储一个存储在外部服务器上的数据副本。地图每隔几秒钟就会更新一次数据的新副本。 我有一个循环,每隔几秒钟运行一次,它可以访问HashMap并按照值的顺序将元素添加到数组中(实际上它做的事情还多一些,但这并不相关)。我的问题是,如果数据在创建数组的过程中发生了变化,您可能会在不同的地方有重复的键,或者完全省略一些键。 示例: 如您所见,

  • 问题内容: 我想知道一个类的每个实例是否在该类中都有自己的方法副本? 可以说,我有以下课程: 因此,如果两个不同的用户创建了like这样的实例: 是否知道每个用户在其线程中都有的方法的副本?如果是,则实例变量是线程安全的,只要只有实例方法对其进行操作,对吗? 我问这个问题是因为我经常读到实例变量不是线程安全的。而且,当每个用户通过调用运算符获取实例时,我不明白为什么会这样? 问题答案: 每个对象都

  • 问题内容: 在中,此变量被声明为是我的问题,在某些调用之后检查值还是在多线程代码中使用perror()是安全的。这是线程安全变量吗?如果没有,那还有什么选择呢? 我在x86体系结构上将Linux与gcc一起使用。 问题答案: 是的,它是线程安全的。在Linux上,全局errno变量是特定于线程的。POSIX要求errno必须是线程安全的。 参见http://www.unix.org/whitepa

  • 问题内容: 我们在项目中使用了Drools kieSessions。许多线程可以创建新的kieSession。有时在创建会话时线程可能会挂起。因此,问题是: 首先 是kieContainer.newKieSession线程安全操作吗? 上吊的原因可能是肮脏的文字或阅读的kie会话集之类的东西吗? 问题答案: 当我在实践中检查 不是线程安全的操作。