根据线程名获取线程及停止进程
-
线程的命名与获取名称方法
设置名称可以使用Thread类的如下方法:
*构造方法:public Thread (Runnable Target,String name)
*设置名字:public final void setName(String name)
获取线程名城:
*当前运行的线程名称:Thread.currentThread().getName()
*取得名字:public final String getName()
-
创建运行线程
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();
-
根据线程名获取线程
-
获取所有线程
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
-
对对应的线程进行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;
}