concurrencypuzzlers/src/chapter2/SafeLazyInit.java
2019-09-20 13:34:33 +02:00

33 lines
944 B
Java

package chapter2;
import common.TestHarness;
import org.junit.Test;
import java.util.concurrent.atomic.LongAdder;
public class SafeLazyInit {
private ExpensiveObject expensiveObject = null;
public synchronized ExpensiveObject getInstance() {
if (expensiveObject == null) {
expensiveObject = new ExpensiveObject();
}
return expensiveObject;
}
@Test
public void test() {
TestHarness testHarness = new TestHarness(100);
LongAdder waitTime=new LongAdder();
SafeLazyInit safeLazyInit = new SafeLazyInit();
testHarness.testMultiThreaded(() -> {
testHarness.waitForSignal();
long t0=System.nanoTime();
safeLazyInit.getInstance();
waitTime.add(System.nanoTime()-t0);
});
System.out.printf("Waiting for instance for %f milliseconds per thread\n", (waitTime.doubleValue()/1000000)/100);
}
}