zoukankan      html  css  js  c++  java
  • java 获取线程id

    如何获取正在运行的线程的ID?

    解决方法

    下面的示例演示如何使用getThreadId() 方法一个正在运行线程的ID。

    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
  • 相关阅读:
    线程池
    非XA式Spring分布式事务
    好的架构不是设计出来的,而是演进出来的
    缓存穿透
    【转】MySQL数据库主从同步管理
    setup 桌面化设置网卡
    gitlab web登入密码忘记以后可以用如下方式修改密码
    kvm与selinux
    linux下跳板机跟客户端之间无密码登陆
    LINUX下安装TeamViewer
  • 原文地址:https://www.cnblogs.com/firstdream/p/6807675.html
Copyright © 2011-2022 走看看