我有一个类,我只想有一个实例。但是,我不希望多个线程调用getInstance()
. 所以我用以下方式编码
public class SomeService implements Provider<String, Claims>{
private SomeService(String a, String b, String c) {
this.a = a;
this.b = b;
this.c = c;
}
// single instance
private static SomeService instance = null;
private String a;
private static AtomicInteger initialized = new AtomicInteger();
private static CountDownLatch latch = new CountDownLatch(1);
private String b;
private String c;
public static SomeService getInstance(String a, String b, String c) {
if ( initialized.incrementAndGet() == 1) {
instance = new SomeService(a, b, c);
latch.countDown();
} else {
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return instance;
}
// Other implementation code
}
我的意图(以及对此的理解)是:
当一个线程调用
getInstance
时,它会自动递增并检查它是否是所需的值。如果没有,它将等待其他线程打开闩锁,这意味着初始化正在进行中。
如果有人帮助我纠正我的错误,那将会很有帮助。在我看来,我可能只是synchronized(someLockObject) {}
阻止,但我想知道这是否有意义。