sclass Trigger implements Runnable { bool triggered; L onTrigger; *() {} *(Runnable *onTrigger) { this.onTrigger = ll(onTrigger); } // for "user" synchronized void trigger() { 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; } }