java併發程式設計:根據執行緒名獲取執行緒及停止執行緒
阿新 • • 發佈:2019-02-14
根據執行緒名獲取執行緒及停止程序
-
執行緒的命名與獲取名稱方法
設定名稱可以使用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過期了。
//殺執行緒
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; }