Ian Rogers wrote:
> here is the revised patch.

+      int arraySize = group.activeCount();
+      Thread[] threadList = new Thread[arraySize];
+      int filled = group.enumerate(threadList);
+      while (filled == arraySize)
+      {
+        arraySize *= 2;
+        threadList = new Thread[arraySize];
+        filled = group.enumerate(threadList);
+      }

Shouldn't the initial array be arraySize + 1, to avoid always having to 
enumerate twice?

A bigger problem is that the ThreadLocal can be resurrected after the finalizer 
has run, so you need to either make localIndex in ThreadLocal volatile and set 
it to -1 in the finalizer, or use a PhantomReference and a ReferenceQueue to do 
the clean up.

Regards,
Jeroen


Reply via email to