/* * Commons eID Project. * Copyright (C) 2008-2013 FedICT. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version * 3.0 as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, see * http://www.gnu.org/licenses/. */ package be.fedict.commons.eid.client.spi; /** * Utility class wrapping the wait/notifyAll mechanism with a guard variable, * and providing it with an independent object to apply to. Use when no obvious * objects are available to wait() upon, and multiple occurrences may be waited * for, to avoid cluttering such code with guard variables. * * @author Frank Marien * */ public class Sleeper { private boolean isAwoken; public synchronized void sleepUntilAwakened(final long timeout) { while (!this.isAwoken) { try { this.wait(timeout); } catch (final InterruptedException iex) { } // intentionally empty } this.isAwoken = false; } public synchronized void sleepUntilAwakened() { while (!this.isAwoken) { try { this.wait(); } catch (final InterruptedException iex) { } // intentionally empty } this.isAwoken = false; } public synchronized void awaken() { this.isAwoken = true; this.notifyAll(); } }