How to get the Id of the running thread in Java



Problem Description

How to get the Id of the running thread?

Solution

Following example demonstrates how to get the Id of a running thread using getThreadId() method.

public class Main extends Object implements Runnable {
   private ThreadID var;
   public Main(ThreadID v) {
      this.var = v;
   } 
   public void run() {
      try {
         print("var getThreadID =" + var.getThreadID());
         Thread.sleep(2000);
         print("var getThreadID =" + var.getThreadID());
      } catch (InterruptedException x) {}
   } 
   private static void print(String msg) {
      String name = Thread.currentThread().getName();
      System.out.println(name + ": " + msg);
   } 
   public static void main(String[] args) {
      ThreadID tid = new ThreadID();
      Main shared = new Main(tid);
      try {
         Thread threadA = new Thread(shared, "threadA");
         threadA.start();
         Thread.sleep(500);
         
         Thread threadB = new Thread(shared, "threadB");
         threadB.start();
         Thread.sleep(500);
         
         Thread threadC = new Thread(shared, "threadC");
         threadC.start();
      } catch (InterruptedException x) {}
   }
}
class ThreadID extends ThreadLocal {
   private int nextID;
   public ThreadID() {
      nextID = 10001;
   } 
   private synchronized Integer getNewID() {
      Integer id = new Integer(nextID);
      nextID++;
      return id;
   } 
   protected Object initialValue() {
      print("in initialValue()");
      return getNewID();
   } 
   public int getThreadID() {
      Integer id = (Integer) get();
      return id.intValue();
   } 
   private static void print(String msg) {
      String name = Thread.currentThread().getName();
      System.out.println(name + ": " + msg);
   }
}

Result

The above code sample will produce the following result.

threadA: in initialValue()
threadA: var getThreadID = 10001
threadB: in initialValue()
threadB: var getThreadID = 10002
threadC: in initialValue()
threadC: var getThreadID = 10003
threadA: var getThreadID = 10001
threadB: var getThreadID = 10002
threadC: var getThreadID = 10003
java_threading.htm
Advertisements