|
Java 实例 - 获取线程id
以下实例演示了如何使用 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
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 flybird 在 2020-01-26 21:05:27 重新编辑]
|
|