java并发编程:根据线程名获取线程及停止线程

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

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

     

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

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

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

获取线程名城:

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

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

 

  1. 创建运行线程

    public class MyThread extends Thread{
    
        @Override
    
        public void run() {
    
            try {
    
                sleep(Constants.OPERATION_AMOUNT_THREAD_TIME);
    
                /**
    
                    逻辑代码
    
                */
    
            } catch (InterruptedException e) {
    
                Logger.info("线程:" + Thread.currentThread().getName()+"结束.");
    
                System.out.println(e.getMessage());
    
            }
    
        }
    
    }
    
    
    
    MyThread oat= newMyThread ();
    
            oat.setName("110");
    
            System.out.println("创建线程"+oat.getName());
    
    oat.start();

     

 

  1. 根据线程名获取线程

    1. 获取所有线程

      public class Main extends Thread {
      
      		public static void main(String[] args) {
      
      			Main t1 = new Main();
      
      			t1.setName("thread1");
      
      			t1.start();
      
      			ThreadGroup currentGroup =
      
      					Thread.currentThread().getThreadGroup();
      
      			int noThreads = currentGroup.activeCount();
      
      			Thread[] lstThreads = new Thread[noThreads];
      
      			currentGroup.enumerate(lstThreads);
      
      			for (int i = 0; i < noThreads; i++)
      
      				System.out.println("线程号:" + i + " = " + lstThreads[i].getName());
      
      		}
      
      	}

       

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

线程号:0= main

线程号:1= thread1

 

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

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

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

停止进程的方式详见http://blog.csdn.net/weixin_36795183/article/details/79227759

    

//杀线程

    

	public static boolean killThreadByName(String name) {

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

		int noThreads = currentGroup.activeCount();

		Thread[] lstThreads = new Thread[noThreads];

		currentGroup.enumerate(lstThreads);

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

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

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

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

			if (nm.equals(name)) {

				lstThreads[i].interrupt();

				return true;

			}

		}

		return false;

	}

 

  • 11
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值