public class Resource { private Boolean available; public Resource() { super(); this.available = true; } public synchronized void acquire() { if (!this.available) { try { this.available.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.available = false; } public synchronized void release() { this.available.notify(); this.available = true; } }