如果
foo仅初始化一次,
CountDownLatch则非常适合。
class MyThread extends Thread { private final CountDownLatch latch = new CountDownLatch(1); ... Foo getFoo() throws InterruptedException { latch.await(); return foo; } @Override public void run() { foo = makeTheFoo() latch.countDown(); }}闩锁提供与
volatile关键字相同的可见性行为,这意味着
foo即使
foo未声明,读取线程也会看到该线程分配的值
volatile。



