Thread Native ID Access
Alan Bateman
Alan.Bateman at oracle.com
Fri Feb 23 10:57:40 UTC 2018
On 23/02/2018 05:04, John Rose wrote:
> We may or may not bind fiber identity to the legacy java.lang.Thread type.
> This affects the question of whether the following code can return false:
>
> boolean testThreadShift(Runnable r) {
> Thread t0 = Thread.current();
> r.run();
> Thread t1 = Thread.current();
> return t0 == t1;
> }
This is an area that I have been spending time recently. A big benefit
of a Thread object per fiber, and the above always returning true, is
that things that are thread local today (ThreadLocal, thread context
class loader, uncaught exception handler, ...) become fiber local
without too much effort. It means we have Thread objects that aren't
tied to a kernel thread or don't have thread meta data in the VM (the
lifecycle of Threads means we do this today anyway). Lots of details of
course but it's a direction that potentially allows a lot of existing
code to be executed in a fiber without changes.
In the java.lang.management API, ThreadMXBean is more tied to kernel
threads due to methods that reveal thread CPU counters. A possible
direction is to continue with a ThreadMXBean per dinosaur thread, in
which case Jeremy's proposal to expose the native thread identifier
might be okay. That direction would require sorting out a details with
the thread identifier (Thread::getId) as it can be used today to link a
Thread to a ThreadMXBean but that shouldn't be too hard.
-Alan.
More information about the serviceability-dev
mailing list