根据线程名获取线程及停止线程

根据线程名获取线程及停止线程
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说根据线程名获取线程及停止线程,希望能够帮助大家进步!!!

  1. 线程的命名与获取名称方法

    设置名称可以使用Thread类的如下方法:

  1.  
  2. *构造方法:public Thread (Runnable Target,String name)

  3.  
  4. *设置名字:public final void setName(String name)

  5.  
  6. 获取线程名城:

  7.  
  8. *当前运行的线程名称:Thread.currentThread().getName()

  9.  
  10. *取得名字:public final String getName()

 

  1. 创建运行线程

     
    1. public class MyThread extends Thread{

    2.  
    3.     @Override

    4.  
    5.     public void run() {

    6.  
    7.         try {

    8.  
    9.             sleep(Constants.OPERATION_AMOUNT_THREAD_TIME);

    10.  
    11.             /**

    12.  
    13.                 逻辑代码

    14.  
    15.             */

    16.  
    17.         } catch (InterruptedException e) {

    18.  
    19.             Logger.info("线程:" + Thread.currentThread().getName()+"结束.");

    20.  
    21.             System.out.println(e.getMessage());

    22.  
    23.         }

    24.  
    25.     }

    26.  
    27. }

    28.  
    29.  
    30.  
    31. MyThread oat= newMyThread ();

    32.  
    33.         oat.setName("110");

    34.  
    35.         System.out.println("创建线程"+oat.getName());

    36.  
    37. oat.start();

     

 

  1. 根据线程名获取线程

    1. 获取所有线程

       
      1. public class Main extends Thread {

      2.  
      3. public static void main(String[] args) {

      4.  
      5. Main t1 = new Main();

      6.  
      7. t1.setName("thread1");

      8.  
      9. t1.start();

      10.  
      11. ThreadGroup currentGroup =

      12.  
      13. Thread.currentThread().getThreadGroup();

      14.  
      15. int noThreads = currentGroup.activeCount();

      16.  
      17. Thread[] lstThreads = new Thread[noThreads];

      18.  
      19. currentGroup.enumerate(lstThreads);

      20.  
      21. for (int i = 0; i < noThreads; i++)

      22.  
      23. System.out.println("线程号:" + i + " = " + lstThreads[i].getName());

      24.  
      25. }

      26.  
      27. }

       

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

线程号:0= main

线程号:1= thread1

 

  1. 对对应的线程进行interrupt() (安全结束sleep中的进程的方式)

对sleep中的线程进行interrupt()会抛异常 走catch方法 run方法正常结束 安全的停止线程。

可根据自己的业务进程设计停止线程的方式 ,不建议使用stop方法 ,因为存在数据的一致性问题,并且stop方法已经呗java过期了。

停止进程的方式详见  https://fzy15116089232.blog.csdn.net/article/details/111320907

    

//杀线程

    

 
  1. public static boolean killThreadByName(String name) {

  2.  
  3. ThreadGroup currentGroup = Thread.currentThread().getThreadGroup();

  4.  
  5. int noThreads = currentGroup.activeCount();

  6.  
  7. Thread[] lstThreads = new Thread[noThreads];

  8.  
  9. currentGroup.enumerate(lstThreads);

  10.  
  11. Logger.info("现有线程数" + noThreads);

  12.  
  13. for (int i = 0; i < noThreads; i++) {

  14.  
  15. String nm = lstThreads[i].getName();

  16.  
  17. Logger.info("线程号:" + i + " = " + nm);

  18.  
  19. if (nm.equals(name)) {

  20.  
  21. lstThreads[i].interrupt();

  22.  
  23. return true;

  24.  
  25. }

  26.  
  27. }

  28.  
  29. return false;

  30.  
  31. }

 

本文来源huayang183,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/18149

发表评论