1. 程式人生 > >java併發程式設計:根據執行緒名獲取執行緒及停止執行緒

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過期了。

//殺執行緒

	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;

	}