一个有意思的题目,与大家分享下

public class Lazy {

    private static boolean initialized = false;

    static {
        Thread t = new Thread(() -> initialized = true);
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            throw new AssertionError(e);
        }
    }

    public static void main(String[] args) {
        System.out.println(initialized);
    }
}

以上程序输出内容是?
A. true
B. false
C. 编译错误
D. 以上答案都不对

2 个赞

D 什么也不输出。

为啥??

这个代码会形成死锁。大概就是main线程会进行类初始化,然后main线程会等待t线程结束,然而t线程会等着main线程类初始化完成,所以相互等待。死锁

小马哥的每日一题,感兴趣可以去b站搜搜视频讲解