我們先看個例子,代碼入下:
package com.renzhan;class TestRunnable implements Runnable{ public void run(){ while(true) { System.out.代碼的輸出如下:Thread is running...falseThread is running...trueThread is running...trueThread is running...trueThread is running...true線程在調用interrupt 后,只是修改了他的狀態,對線程的工作還是沒有影響,這個是線程一直占據了cpu處于執行的狀態。那么我們把線程的狀態修改成sleep呢? 代碼如下:
class TestRunnable implements Runnable{ public void run(){ try{ Thread.sleep(1000000); //這個線程將被阻塞1000秒 }catch(InterruptedException e){ e.printStackTrace(); //do more work and return. } }}對應的輸出如下:
java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at TestRunnable.run(App.java:6) at java.lang.Thread.run(Thread.java:745)這個是因為線程當前處于阻塞狀態,線程沒有占用CPU,線程是不可能給自己的中斷狀態置位的。我們調用intrrupted 時候,這就會產生一個InterruptedException異常。正常我們就可以在異常處理中進行后續邏輯處理,我們也因此讓進程變成了非阻塞狀態。
新聞熱點
疑難解答