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