多執行緒——常用操作方法(二)
阿新 • • 發佈:2019-01-30
多執行緒常用操作可以總結成一下七種。
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、執行緒停止:
- 設定標誌位,讓執行緒正常退出;
- 使用stop()強制停止執行緒;(JDK 9徹底取消)
- 使用 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("程式碼結束");
}
}