static class Q implements AutoCloseable { S name = "Unnamed Queue"; L q = synchroLinkedList(); new SingleThread st; BlockingQueue q = new LinkedBlockingQueue; volatile bool retired; *() {} *(S *name) {} void add(Runnable r) { q.add(r); st.go(r { _run() }); } void add(O r) { add(toRunnable(r)); } void _run() { L l = cloneAndClearList(q); for (Runnable r : l) { if (!licensed() || retired) ret; pcall { r.run(); } } } // end after current items have been processed void done() { add(r { throw new Done; }); } public void close() { retired = true; } // TODO: interrupt thread bool isEmpty() { ret q.isEmpty(); } }