private static CountDownLatch countDownLatch = new CountDownLatch(1);
static {
new Thread(()->{
System.out.println("子线程方法被执行");
countDownLatch.countDown();
}).start();
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主线程执行");
}
我们在项目中可能会使用静态代码块来做一些初始化工作.例如zookeeper客户端.需要在创建的时候监听watcher 的回掉才能知道客户端是否创建成功.所以在静态代码块中可能需要阻塞主线程等待子线程回掉成功再继续执行
但是在静态代码块中,只有等主线程执行结束才会执行子线程!!!
所以上面的方法会直接导致死锁.具体原理等我搞懂了再补充