Looks good -- thanks for the further simplification. Minor editorial comments, to add what Kim and Chris noted:
- In many places you write, e.g., "Cleaner" rather than "{@code Cleaner}". For consistency with the rest of the package it'd be better in most cases just to write "cleaner" or, if its nature as a class is important, write "{@code Cleaner}". The same goes for Cleanable, Thread, ThreadFactory, and all other types. - The specification of Cleaner::create() mentions "ThreadContextClassLoader", but that's not actually a type anywhere in the JDK. Suggest "{@linkplain java.lang.Thread#getContextClassLoader context class loader}. - In the same method, it'd be helpful to provide links into the Thread class (or wherever) for the concepts of access-control context and thread locals. - Mark