Lấy ID của Thread trong Java



Miêu tả vấn đề

Cách lấy ID của thread đang chạy trong Java?

Giải pháp

Ví dụ sau minh họa cách lấy ID của thread đang chạy bởi sử dụng phương thức getThreadId() trong Java.

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);
  }
}

Kết quả

Code trên sẽ cho kết quả sau:

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

thread_trong_java.jsp