延迟初始化导致死锁

时间:2017-05-08 07:04:44

标签: java multithreading deadlock

当我运行以下程序时,它只是永远挂起,在我看来是因为死锁

根据我的理解我

  • 静态字段isInitialized最初设置为false
  • 然后主线程创建一个后台线程,其运行方法 将isInitialized设置为true
  • 主线程启动后台线程并等待它 通过致电join完成。
  • 一旦后台线程完成,毫无疑问 isInitialized必须设置为True。

但是当我运行程序时,发现它什么都没打印;它只是挂起!

public class Test {
    private static boolean isInitialized = false;

    static {
        Thread t = new Thread(new Runnable() {
            public void run() {
                isInitialized = true;
            }
        });
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {

        }
    }

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

有人可以帮助我理解这种行为吗,如果是这样,为什么会出现死锁?

0 个答案:

没有答案