sclass Trigger implements Runnable { bool triggered; Runnable onTrigger; // for "user" synchronized void trigger() { if (triggered) ret; triggered = true; pcallF(onTrigger); } public void run() { trigger(); } // for "implementer" - check if triggered and clear flag synchronized bool check() { if (!triggered) false; ret true with triggered = false; } }