Java 实例 _ 获取线程id

Java 实例 Java 实例

以下实例演示了如何使用 getThreadId() 方法获取线程id:

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

以上代码运行输出结果为:

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 实例 Java 实例

0 个评论

要回复文章请先登录注册