On Wed 24 Jul 2013 08:20:56 AM CEST, Mandy Chung wrote: > > On 7/24/2013 2:09 PM, Daniel Fuchs wrote: >> On 7/24/13 8:01 AM, Mandy Chung wrote: >>> I am catching up on this thread.... >>> >>> The thread count counts Java threads that are not hidden. I believe >>> all VM internal threads are hidden from external API. This test runs >>> in othervm mode and AFAICT the thread count is expected to be >>> deterministic. I don't expect the VM will start and terminate any >>> thread any time. >>> >>> I agree with David that we should diagnose why there is one >>> additional thread started before the reset. If it is the >>> LogManager$Cleaner thread, like David said, the VM is shutting down >>> while the test is still running which doesn't quite make sense. >> I think that Shanliang's suspicion that a thread might be still alive >> if unscheduled just after having >> called its barrier.signal() is a very good suggestion. I would advise >> calling thread.join() on all threads in >> terminateThreads, just to make sure they are all really dead and not >> in some comatose state... >> If Shanliang is right then the test would be failing because some of >> the threads we think are dead are >> not actually dead yet - and not because of some new VM thread that >> nobody can see :-) > > Thanks for pointing that out. > > I agree that the test should be changed to call Thread.join(). There > may be other java.lang.management tests that should also be fixed to > call Thread.join.
I've tried using Thread.join() but I am still getting the thread count discrepancy. Specifically: 1. 10 worker threads have been successfully started - mben.getThreadCount() reports 14 and Thread.getAllStackTraces() returns 14 items --- Thread: Thread[Signal Dispatcher,9,system] Thread: Thread[worker-5,5,main] Thread: Thread[worker-7,5,main] Thread: Thread[worker-9,5,main] Thread: Thread[worker-12,5,main] Thread: Thread[worker-11,5,main] Thread: Thread[Reference Handler,10,system] Thread: Thread[main,5,main] Thread: Thread[worker-10,5,main] Thread: Thread[worker-8,5,main] Thread: Thread[Finalizer,8,system] Thread: Thread[worker-6,5,main] Thread: Thread[worker-13,5,main] Thread: Thread[worker-4,5,main] --- 2. Terminating 8 threads 3. After the threads have been terminated (waiting on Thread.join() for them to die) - mbean.getThreadCount() reports 7 while Thread.getAllStackTraces() returns only 6 items --- Thread: Thread[Signal Dispatcher,9,system] Thread: Thread[Finalizer,8,system] Thread: Thread[worker-12,5,main] Thread: Thread[Reference Handler,10,system] Thread: Thread[main,5,main] Thread: Thread[worker-13,5,main] --- This would almost point to mbean.getThreadCount() reporting a stale value. Is that possible? -JB- > > Mandy
