Hi,

I added a helper method to ThreadGroup that the VM can use to
(relativelyly) efficiently resolve a thread id into a Thread object.

Regards,
Jeroen

2006-07-01  Jeroen Frijters  <[EMAIL PROTECTED]>

        * java/lang/ThreadGroup.java
        (getThreadFromId, getThreadFromIdImpl): New methods.
Index: java/lang/ThreadGroup.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/lang/ThreadGroup.java,v
retrieving revision 1.21
diff -u -r1.21 ThreadGroup.java
--- java/lang/ThreadGroup.java  10 May 2006 13:54:51 -0000      1.21
+++ java/lang/ThreadGroup.java  1 Jul 2006 12:39:11 -0000
@@ -749,4 +749,43 @@
           parent.removeGroup(this);
       }
   }
+
+  /*
+   * Helper method for the VM. Find a Thread by its Id.
+   *
+   * @param id The Thread Id.
+   * @return Thread object or null if thread doesn't exist.
+   */
+  static Thread getThreadFromId(long id)
+  {
+    return root.getThreadFromIdImpl(id);
+  }
+
+  private Thread getThreadFromIdImpl(long id)
+  {
+    synchronized (threads)
+      {
+        for (int i = 0; i < threads.size(); i++)
+          {
+            Thread t = (Thread) threads.get(i);
+            if (t.getId() == id)
+              return t;
+          }
+      }
+    Vector groups = this.groups;
+    if (groups != null)
+      {
+        synchronized (groups)
+          {
+            for (int i = 0; i < groups.size(); i++)
+              {
+                ThreadGroup g = (ThreadGroup) groups.get(i);
+                Thread t = g.getThreadFromIdImpl(id);
+                if (t != null)
+                  return t;
+              }
+          }
+      }
+    return null;
+  }
 } // class ThreadGroup

Reply via email to