は、ここでは、(呼び出し可能と)メモ化を使用してそれを行うことができます一つの方法です:
クラスメモ:
public class Memo<T> {
private T result;
private final Callable<T> callable;
private boolean established;
public Memo(final Callable<T> callable) {
this.callable = callable;
}
public T get() {
if (!established) {
try {
result = callable.call();
established = true;
}
catch (Exception e) {
throw new RuntimeException("Failed to get value of memo", e);
}
}
return result;
}
}
今、私たちは最終的CONNを作成することができます!
private final Memo<Connection> conn = new Memo<Connection>(
new Callable<Connection>() {
public Connection call() throws Exception {
return new Connection();
}
});
public Connection getConnection() {
return conn.get();
}
Source
私は "connの" フィールド上のfinal修飾子は右、タイプミスでしょうか?推測 – Nicolas
connをvolatileとマークする必要があります。ダブルチェックされたロックはそれなしでは壊れており、揮発性であってもjava 1.4以前では壊れています – jassuncao