Java 实例 - 获取线程id


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

  1. /*
  2. author by shouce.ren
  3. Main.java
  4. */
  5.  
  6. public class Main extends Object implements Runnable {
  7. private ThreadID var;
  8.  
  9. public Main(ThreadID v) {
  10. this.var = v;
  11. }
  12.  
  13. public void run() {
  14. try {
  15. print("var getThreadID =" + var.getThreadID());
  16. Thread.sleep(2000);
  17. print("var getThreadID =" + var.getThreadID());
  18. } catch (InterruptedException x) {
  19. }
  20. }
  21.  
  22. private static void print(String msg) {
  23. String name = Thread.currentThread().getName();
  24. System.out.println(name + ": " + msg);
  25. }
  26.  
  27. public static void main(String[] args) {
  28. ThreadID tid = new ThreadID();
  29. Main shared = new Main(tid);
  30.  
  31. try {
  32. Thread threadA = new Thread(shared, "threadA");
  33. threadA.start();
  34.  
  35. Thread.sleep(500);
  36.  
  37. Thread threadB = new Thread(shared, "threadB");
  38. threadB.start();
  39.  
  40. Thread.sleep(500);
  41.  
  42. Thread threadC = new Thread(shared, "threadC");
  43. threadC.start();
  44. } catch (InterruptedException x) {
  45. }
  46. }
  47. }
  48.  
  49. class ThreadID extends ThreadLocal {
  50. private int nextID;
  51.  
  52. public ThreadID() {
  53. nextID = 10001;
  54. }
  55.  
  56. private synchronized Integer getNewID() {
  57. Integer id = new Integer(nextID);
  58. nextID++;
  59. return id;
  60. }
  61.  
  62.  
  63. protected Object initialValue() {
  64. print("in initialValue()");
  65. return getNewID();
  66. }
  67.  
  68. public int getThreadID() {
  69. Integer id = (Integer) get();
  70. return id.intValue();
  71. }
  72.  
  73. private static void print(String msg) {
  74. String name = Thread.currentThread().getName();
  75. System.out.println(name + ": " + msg);
  76. }
  77. }

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

  1. threadA: in initialValue()
  2. threadA: var getThreadID =10001
  3. threadB: in initialValue()
  4. threadB: var getThreadID =10002
  5. threadC: in initialValue()
  6. threadC: var getThreadID =10003
  7. threadA: var getThreadID =10001
  8. threadB: var getThreadID =10002
  9. threadC: var getThreadID =10003