sclass CloseablesHolder extends Meta implements AutoCloseable, IResourceHolder { new LinkedHashSet closeables; WeakRef createdInThread = weakRef(currentThread()); public synchronized A add(A a) { if (a != null) closeables.add(a); ret a; } // remove from list, don't close synchronized A remove aka takeOut(A a) { closeables.remove(a); ret a; } // close and remove synchronized A close(A a) { if (a == null) ret a; closeables.remove(a); main close(a); ret a; } public void close { for (AutoCloseable c : reversed(cloneAndClear(closeables))) main close(c); } public synchronized void forget aka clear() { closeables.clear(); } }