Used on INSTANCE methods that should be run only when a process is complete,
in either success or error state.
Note that in some environments, a thread will outlive a process;
if you are using the X_Process manager, you can simply register
an X_Process#onProcessComplete() handler to perform cleanup,
or use X_Process#getProcessLocal() to have a ThreadLocal-like cache,
that will be cleaned for you whenever the process is complete.
Methods annotated with OnProcessDeath contained within a process class
will be run once that process is being shut down.
Using OnProcessComplete is preferred over thread level caching;
a single thread may run many processes,
but a single process may span multiple threads.
Thread-level caching / cleanup is recommended when you are running many
processes in a single thread; or if your objects are not threadsafe enough
to withstand highly parallel access.
If you can handle the concurrency, wrapping many processes in a larger
process will allow for more sharing between threads, and a potentially
lighter memory footprint.
For a string-key map optimized for highly concurrent thread safety,
see
MultithreadedStringTrie. It's bad in single or lightly threaded
processes, but can kick ass in a highly concurrent environment.
(It is a prefix-trie which locks on each node going down,
so threads working in "a.b.c.d" rarely interrupt those in "a.bb.c.d",
as they only contend whilst descending common paths.)