package org.multiverse.stms.gamma.benchmarks; /** * A once reusable blocking structure. Other threads can wait for it while it is still closed, and once it * opens all waiting threads can continue. * * @author Peter Veentjer */ public final class Latch { private volatile boolean isOpen = false; public Latch() { this(false); } public Latch(boolean open) { isOpen = open; } public boolean isOpen() { return isOpen; } public void open() { if (isOpen) { return; } synchronized (this) { isOpen = true; notifyAll(); } } public void await() { if (isOpen) { return; } synchronized (this) { while (!isOpen) { try { wait(); } catch (InterruptedException e) { throw new RuntimeException(e); } } } } @Override public String toString() { return "Latch{" + "isOpen=" + isOpen + '}'; } }