JAVA虚拟机有义务保证<clinit>()方法的线程安全

JAVA虚拟机有义务保证()方法的线程安全

import java.util.concurrent.atomic.AtomicBoolean;


public class ClinitThreadTest {

    public static void main(String[] args) {
        // 创建并启动两个线程,每个线程都执行 ClinitObject 的初始化(即 new ClinitObject())
        new Thread(ClinitObject::new).start();
        new Thread(ClinitObject::new).start();
    }

    // 静态内部类 ClinitObject
    static class ClinitObject {

        // 声明一个静态的 AtomicBoolean 变量 flag,并初始化为 true
        private static AtomicBoolean flag = new AtomicBoolean(true);

        // 静态代码块,在类加载时执行
        static {
            // 打印当前线程名称和类初始化开始的信息
            System.out.println(Thread.currentThread().getName() + "ClinitObject init");

            // 一个死循环,只有当 flag 变为 false 时才会退出
            while (flag.get()) {

            }

            // 打印当前线程名称和类初始化结束的信息
            System.out.println(Thread.currentThread().getName() + "ClinitObject init end");
        }
    }
}
Thread-0ClinitObject init
Process finished with exit code 130

你可能感兴趣的:(Java基础,java,开发语言)