static class MonoThread { Thread t; boolean runIfNotRunning(final Runnable r) { ret run(r); } synchronized boolean run(final Runnable r) { if (t == null) { t = new Thread() { public void run() { try { r.run(); } catch (Throwable e) { e.printStackTrace(); } finally { synchronized(MonoThread.this) { t = null; } } } }; t.start(); return true; } else return false; } }