static class SingleThread { bool running; void run(O r) { go(r); } synchronized bool go(final O runnable) { if (running) false; running = true; thread "Single Thread" { try { callF(runnable); } finally { _done(); } } true; } synchronized void _done() { running = false; } bool running() { ret running; } }