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