**
public class thread3 extends thread
else
} }
public static void main(string args) throws interruptedexception
}
//interrupted的經典使用**
public void run()
}catch(interruptedexception e)
finally
}
/*
* 如果執行緒被阻塞,它便不能核查共享變數,也就不能停止。這在許多情況下會發生,例如呼叫
* object.wait()、serversocket.accept()和datagramsocket.receive()時,他們都可能永
* 久的阻塞執行緒。即使發生超時,在超時期滿之前持續等待也是不可行和不適當的,所以,要使
* 用某種機制使得執行緒更早地退出被阻塞的狀態。很不幸運,不存在這樣一種機制對所有的情況
* 都適用,但是,根據情況不同卻可以使用特定的技術。使用thread.interrupt()中斷執行緒正
* 如example1中所描述的,thread.interrupt()方法不會中斷乙個正在執行的執行緒。這一方法
* 確切的說,如果執行緒被object.wait, thread.join和thread.sleep三種方法之一阻塞,那麼,
* 它將接收到乙個中斷異常(interruptedexception),從而提早地終結被阻塞狀態。因此,
* 如果執行緒被上述幾種方法阻塞,正確的停止執行緒方式是設定共享變數,並呼叫interrupt()(注
* 意變數應該先設定)。如果執行緒沒有被阻塞,這時呼叫interrupt()將不起作用;否則,執行緒就
* 將得到異常(該執行緒必須事先預備好處理此狀況),接著逃離阻塞狀態。在任何一種情況中,最
* 後執行緒都將檢查共享變數然後再停止。下面示例描述了該技術。
* */
package concurrency.interrupt;
class example3 extends thread
public void run() catch (interruptedexception e)
} system.out.println("thread exiting under request...");
} }
/* * 把握幾個重點:stop變數、run方法中的sleep()、interrupt()、interruptedexception。串接起
* 來就是這個意思:當我們在run方法中呼叫sleep(或其他阻塞執行緒的方法)時,如果執行緒阻塞的
* 時間過長,比如10s,那在這10s內,執行緒阻塞,run方法不被執行,但是如果在這10s內,stop被
* 不能檢查stop,所 以執行緒不能終止,這個時候,我們就可以用interrupt()方法了:我們在
* 訊號,該訊號將被catch語句捕獲到,一旦捕獲到這個訊號,執行緒就提前終結自己的阻塞狀態,這
* 樣,它就能夠 再次執行run 方法了,然後檢查到stop = true,while迴圈就不會再被執行,在執
* 行了while後面的清理工作之後,run方法執行完 畢,執行緒終止。
* */
正確中斷java執行緒
不提倡的stop 方法 臭名昭著的stop 停止執行緒的方法已不提倡使用了,原因是什麼呢?當在乙個執行緒物件上呼叫stop 方法時,這個執行緒物件所執行的執行緒就會立即停止,並丟擲特殊的threaddeath 異常。這裡的 立即 因為太 立即 了,假如乙個執行緒正在執行 synchronized v...
正確中斷java執行緒
不提倡的stop 方法 臭名昭著的stop 停止執行緒的方法已不提倡使用了,原因是什麼呢?當在乙個執行緒物件上呼叫stop 方法時,這個執行緒物件所執行的執行緒就會立即停止,並丟擲特殊的threaddeath 異常。這裡的 立即 因為太 立即 了,假如乙個執行緒正在執行 synchronized v...
對執行緒中斷,join,yield的理解
乙個執行緒在未正常結束之前,被強制終止是很危險的事情.因為它可能帶來完全預料不到的嚴重後果.所以你看到thread.suspend,thread.stop等方法都被deprecated了 那麼不能直接把乙個執行緒搞掛掉,但有時候又有必要讓乙個執行緒死掉,或者讓它結束某種等待的狀態 該怎麼辦呢?優雅的...