在java裏面阻塞的函數調用以後會產生什麼樣的效果呢?java
在生活中, 最多見的阻塞現象是公路上汽車的堵塞. 汽車在公路上快速行駛, 若是前方交通受阻, 就只好停下來等待, 等到交通暢順, 才能恢復行駛.
線程在運行中也會由於某些緣由而阻塞. 全部處於阻塞狀態的線程的共同特徵是: 放棄CPU, 暫停運行, 只有等到致使阻塞的緣由消除, 才能恢復運行; 或者被其餘線程中斷, 該線程會退出阻塞狀態, 而且拋出 InterruptedException. 由於沒有CPU因此調用interrupt方法的時候,沒法改變你自身的interrupt status,因此,任何產生阻塞的線程,都是放棄當前對CPU的佔用。ide
這裏上一個demo函數
public class TestInterruptMain { public static void main(String[] args) throws InterruptedException { TestInterrupt interrupt = new TestInterrupt(); Thread t1 = new Thread(interrupt); t1.start(); Thread.sleep(10000); t1.interrupt(); } } public class TestInterrupt implements Runnable { @Override public void run() { try { //此時處於阻塞,調用interrupt會拋出異常,由於並無對cpu的佔用 Thread.sleep(1000000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().isInterrupted()); while (true&&!Thread.currentThread().isInterrupted()) { System.out.println(Thread.currentThread().getState()); System.out.println("Thread is running..."); long time = System.currentTimeMillis();// 去系統時間的毫秒數 //不會阻塞 while ((System.currentTimeMillis() - time < 1000)) { } } } }