java - 方法级单例实例线程安全吗?

标签 java multithreading thread-safety singleton

线程下面对obj的操作是否安全?我知道方法级变量和实例在每个线程的堆栈上 - 但我不确定当局部变量是单例时会发生什么。 foo() 在网络服务调用中被调用。我很好奇这是否是线程安全的?

public void foo() {
    SomeObject obj = getSomeObject();  
    obj.doSomething();   // Would this be thread safe?
}

private SomeObject getSomeObject() {
    // returns singleton
    SpringContext.getBean("someObject");
}

class SomeObject {
    int x;
      ...

    // Not synchronized
    public void doSomething() {

    }
}

最佳答案

这取决于你所说的“线程安全”是什么意思。如果 SomeObject.doSomething() 以不安全的方式改变实例,那么不,它不安全。两个不同的线程可以获得对同一对象的引用。

基本上,除非 SomeObject 被设计为同时从多个线程使用,否则您不应该将其设为单例。

关于java - 方法级单例实例线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12287478/

相关文章:

linux - 如何使我的 Boot.java 类作为 main 类始终位于我有其他进程导致 Java 出现问题的地方?

java - Java 中的线程说明

c++在第一类的构造函数中创建第二类的对象 - 多线程

C 中的缓存文件指针

java - 你如何使用事件调度线程?

java - Collectors.groupingBy 用于 Map<Long, List<String>> 并进行一些字符串操作

java - Holder 中发生某些情况时更新 RecyclerView

java - 哪个是处理离线数据的最佳数据库应用程序?

c++ - 条件变量中触发错误信号的频率如何?

java - 线程安全地循环通过 ConcurrentHashMap,无阻塞