java - Java中静态 block 的线程安全

标签 java multithreading static

假设我有一些 Java 代码:

public class SomeClass {
    static {
        private final double PI = 3.14;
        private final double SOME_CONSTANT = 5.76;
        private final double SOME_OTHER_CONSTANT = 756.33;
    }

  //rest of class
}

如果一个线程正在初始化 SomeClass 的 Class 对象,并且在第二个线程想要再次加载 SomeClass 的 Class 时正在初始化静态 block 中的值,那么发生在静态 block 上?即使第一个线程没有完成,第二个线程是否会忽略它假设它已经初始化?还是发生了其他事情?

最佳答案

如果第一个线程还没有完成 SomeClass 的初始化,第二个线程将阻塞。

这在 section 12.4.2 中的 Java 语言规范中有详细说明.

关于java - Java中静态 block 的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462697/

相关文章:

java - 将 Angular + Spring Boot 部署到 Tomcat

ios - Swift,应用程序在模拟器的后台运行,但不在设备上运行

java - 如何在 Web 应用程序中触发异步线程,并保证仅触发 1 个线程?

c++ - 静态计数器-如何让ID不改变[C++]

java - MapReduce 中的 N 轮减少

java - JPA CriteriaBuilder 连接条件转换为分离条件

Java用另一个对象监视一个对象

java - 为什么在Thread类 "public static final int MAX_PRIORITY"中声明为int?

c# - ColdFusion 中静态方法的等价物是什么?

java - 使用@Async 方法的 JUnit 回滚事务