Hi all,

It came to my attention that you introduced TerminatingThreadLocal in openjdk 
lately as an “internal class”:

http://hg.openjdk.java.net/jdk/jdk/rev/106dc156ce6b 
<http://hg.openjdk.java.net/jdk/jdk/rev/106dc156ce6b>

I would like to take the chance to ask if you ever considered to make this 
“non-internal” as I think it would super helpful for some use cases.  To give 
you some more context let me give you an example of why we would love it in 
netty.

So in netty we sometimes pool “direct memory” in ThreadLocals [1]  and have to 
do some tricks to ensure this direct memory is really released once a Thread 
exit. Which I think is also exactly one use-case you have here. Sure we can do 
this with a WeakReference + ReferenceQueue , Cleaner or finalizer but I feel 
exposing TerminatingThreadLocal would be a lot more elegant. Another advantage 
would be that we can be sure that the cleanup action would be called in the 
Thread that holds the value of the ThreadLocal, which is not really possible 
with using WeakReference + ReferenceQueue , Cleaner or finalizer.

What we currently doing in netty is basically have our own ThreadLocal [1] 
implementation and out own Thread sub-class [2] that will ensure we call some 
method on our TheadLocal that gives us the chance to do the cleanup by wrapping 
the Runnable[3] that is passed in. This works great but we can not always 
guarantee that our sub-class of Thread is used to access our ThreadLocal 
implementation, which means the cleanup action will not run in this case.

Thanks,
Norman

[1] 
https://github.com/netty/netty/blob/netty-4.1.26.Final/common/src/main/java/io/netty/util/concurrent/FastThreadLocal.java
 
<https://github.com/netty/netty/blob/netty-4.1.26.Final/common/src/main/java/io/netty/util/concurrent/FastThreadLocal.java>
[2] 
https://github.com/netty/netty/blob/netty-4.1.26.Final/common/src/main/java/io/netty/util/concurrent/FastThreadLocalThread.java
 
<https://github.com/netty/netty/blob/netty-4.1.26.Final/common/src/main/java/io/netty/util/concurrent/FastThreadLocalThread.java>
[3] 
https://github.com/netty/netty/blob/netty-4.1.26.Final/common/src/main/java/io/netty/util/concurrent/FastThreadLocalRunnable.java
 
<https://github.com/netty/netty/blob/netty-4.1.26.Final/common/src/main/java/io/netty/util/concurrent/FastThreadLocalRunnable.java>






Reply via email to