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