Java 实例 - 获取线程id
以下实例演示了如何使用 getThreadId() 方法获取线程id:
Main.java 文件
publicclassMainextendsObjectimplementsRunnable{privateThreadIDvar;
publicMain(ThreadIDv){this.var = v;
}publicvoidrun(){try{print("var getThreadID =" + var.getThreadID());
Thread.sleep(2000);
print("var getThreadID =" + var.getThreadID());
}catch(InterruptedExceptionx){}}privatestaticvoidprint(Stringmsg){Stringname = Thread.currentThread().getName();
System.out.println(name + ": " + msg);
}publicstaticvoidmain(String[]args){ThreadIDtid = newThreadID();
Mainshared = newMain(tid);
try{ThreadthreadA = newThread(shared, "threadA");
threadA.start();
Thread.sleep(500);
ThreadthreadB = newThread(shared, "threadB");
threadB.start();
Thread.sleep(500);
ThreadthreadC = newThread(shared, "threadC");
threadC.start();
}catch(InterruptedExceptionx){}}}classThreadIDextendsThreadLocal{privateintnextID;
publicThreadID(){nextID = 10001;
}privatesynchronizedIntegergetNewID(){Integerid = newInteger(nextID);
nextID++;
returnid;
}protectedObjectinitialValue(){print("in initialValue()");
returngetNewID();
}publicintgetThreadID(){Integerid = (Integer)get();
returnid.intValue();
}privatestaticvoidprint(Stringmsg){Stringname = 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