java線程裏面的細節問題

在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)) {
			}
		}
	}
	
	
}
相關文章
相關標籤/搜索