線程中斷
阿新 • • 發佈:2018-02-08
lee 時間 runnable pos 優先級 可執行 上大 選擇 就會
package 第二章.新建線程;
/**
* Created by zzq on 2018/1/17.
*/
public class 線程中斷 {
public static void main(String[] args) throws InterruptedException {
Thread thread=new Thread(new Runnable() {
public void run() {
while (true){
if(Thread.currentThread().isInterrupted()){
System.out.println("線程被中斷了");
break;
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// e.printStackTrace();
System.out.println("線程sleep狀態被中斷");
Thread.currentThread().interrupt();
}
System.out.println("線程正在執行");
Thread.yield();
}
}
});
thread.start();
Thread.sleep(500);
thread.interrupt();
//thread.interrupt() 中斷線程方法
//thread.isInterrupted() 判斷線程是否中斷線程方法
//代碼15行到21行 說明了線程在睡眠的時候被中斷,中斷的應用可以讓我們識別在循環體中,出現了wait或者sleep這樣的操作
}
/* Thread.yield( )方法:
使當前線程從執行狀態(運行狀態)變為可執行態(就緒狀態)。cpu會從眾多的可執行態裏選擇,
也就是說,當前也就是剛剛的那個線程還是有可能會被再次執行到的,並不是說一定會執行其他線
程而該線程在下一次中不會執行到了。
Java線程中有一個Thread.yield( )方法,很多人翻譯成線程讓步。顧名思義,就是說當一個線程使
用了這個方法之後,它就會把自己CPU執行的時間讓掉,讓自己或者其它的線程運行。打個比方:
現在有很多人在排隊上廁所,好不容易輪到這個人上廁所了,突然這個人說:“我要和大家來個競賽,
看誰先搶到廁所!”,然後所有的人在同一起跑線沖向廁所,有可能是別人搶到了,也有可能他自己有
搶到了。我們還知道線程有個優先級的問題,那麽手裏有優先權的這些人就一定能搶到廁所的位置嗎?
不一定的,他們只是概率上大些,也有可能沒特權的搶到了。*/
}
線程中斷