1. 程式人生 > >多執行緒——常用操作方法(二)

多執行緒——常用操作方法(二)

多執行緒常用操作可以總結成一下七種。

1、取得當前執行緒物件: public static native Thread currentThread(); 

2、執行緒的命名和取得當前執行緒的名字:public Thread(Runnable terget,String name)、public String getname()

3、執行緒休眠 ——sleep(毫秒):讓執行緒暫緩執行,等預計時間後再恢復執行。(不會釋放物件鎖)

  • 執行緒並非同時休眠,同一時刻的JVM只會執行一個執行緒。
  • 執行緒休眠會導致執行緒從執行狀態轉換到阻塞狀態,休眠結束時由阻塞狀態轉換至就緒狀態,再執行由系統排程,無法認為干涉。
  • 執行緒中斷為受查異常,必須強制處理。

4、執行緒讓步——yield():當前執行緒交出CPU,不釋放物件鎖。

  • 交出CPU的時間不可控,只能保證讓同等優先順序的執行緒有獲得CPU的機會。
  • 讓當前執行緒由執行狀態轉換為就緒狀態。

5、join()方法:等待該執行緒執行結束後繼續執行本執行緒

  • 主執行緒呼叫join(),會使主執行緒休眠;
  • 使呼叫該方法的執行緒結束後再執行主執行緒。

6、執行緒停止:

  1. 設定標誌位,讓執行緒正常退出;
  2. 使用stop()強制停止執行緒;(JDK 9徹底取消)
  3. 使用 Thread 中的interrupt()中斷執行緒;
  • 正常狀態下,Thread.interrupt()可以將執行緒狀態中斷,根據此狀態人為進行執行緒終止;
  • 執行緒中出現 wait()、sleep()、join()時呼叫 Thread.interrupt()時會出現中斷異常,必須在catch 快中人為進行執行緒終止。

7、執行緒的優先順序: 

  •    優先順序越高的執行緒越有可能先執行,僅僅是可能而已;
  •    設定優先順序:public final void setpriority (int newpriority);
  •    取得優先順序:publicfinal int getpriority();
  •    執行緒優先順序有繼承性:線上程A中啟動執行緒B,則執行緒B的優先順序與執行緒A相同;

再介紹一個精靈執行緒——守護執行緒:

    守護執行緒是一種特殊的執行緒,只要當前JVM中存在一個非守護執行緒沒有結束,守護執行緒就不會停止,只有當最後一個非守護執行緒結束時,守護執行緒才會停止工作。(垃圾回收執行緒)

  • 判斷是否時守護執行緒:public final boolean isDaemon
  • 設定執行緒為守護執行緒:public final void setDaemon (boolean on )
class myThread<boolen> implements Runnable{  
	@Override
	public void run() {
	int i=0;
	try {
		while(true) {
		i++;
		System.out.println(Thread.currentThread().getName()+
		" "+i+"是否為守護執行緒"+Thread.currentThread().isDaemon());	
			Thread.sleep(1000);}
		} catch (InterruptedException e) {
			System.out.println(Thread.currentThread()
					.getName()+"執行緒中斷了");			
		}
	}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
   myThread mt=new myThread();
   Thread thread=new Thread(mt,"執行緒A");
   Thread thread1=new Thread(mt,"執行緒B");
   thread.setDaemon(true);
   thread.start();   
   thread1.start();
   thread.sleep(3000);
   thread1.interrupt();
   System.out.println("程式碼結束");
		   
 }
}