通過(guò)調(diào)用interrupt方法可以使得處于阻塞狀態(tài)的線程拋出一個(gè)異常,即interrupt方法可以用來(lái)中斷一個(gè)正處于阻塞狀態(tài)的線程;另外,改方法還會(huì)設(shè)置線程的中斷狀態(tài)(注:isInterrupted()可以用來(lái)查詢中斷狀態(tài))。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了郴州免費(fèi)建站歡迎大家使用!
線程阻塞在reader.readLine()時(shí),即使主線程改變了標(biāo)志變量,但是并不能立即結(jié)束子線程,只有等待阻塞被打破,且運(yùn)行到下一次循環(huán)條件判斷的時(shí)候才能終止。所以在使用這種方法時(shí),應(yīng)該考慮到阻塞這種情況。當(dāng)然,如果整個(gè)循環(huán)內(nèi)的操作屬于同一事務(wù)時(shí),這種方法倒很不錯(cuò)。
調(diào)用線程對(duì)象的interrupt()時(shí),sleep的線程會(huì)拋出InterruptedException異常,從而中斷循環(huán),終止線程。但是如果是IO如輸入這些阻塞,中斷的方法又不起作用了,還有就是對(duì)于沒(méi)有阻塞的線程,調(diào)用interrupt()是達(dá)不到終止線程的效果的。
1. 使用退出標(biāo)志,使線程正常退出,也就是當(dāng)run方法完成后線程終止。
2. 使用stop方法強(qiáng)行終止線程(這個(gè)方法不推薦使用,因?yàn)閟top和suspend、resume一樣,也可能發(fā)生不可預(yù)料的結(jié)果)。
3. 使用interrupt方法中斷線程。
1. 使用退出標(biāo)志終止線程
當(dāng)run方法執(zhí)行完后,線程就會(huì)退出。但有時(shí)run方法是永遠(yuǎn)不會(huì)結(jié)束的。如在服務(wù)端程序中使用線程進(jìn)行監(jiān)聽(tīng)客戶端請(qǐng)求,或是其他的需要循環(huán)處理的任務(wù)。在這種情況下,一般是將這些任務(wù)放在一個(gè)循環(huán)中,如while循環(huán)。如果想讓循環(huán)永遠(yuǎn)運(yùn)行下去,可以使用while(true){……}來(lái)處理。但要想使while循環(huán)在某一特定條件下退出,最直接的方法就是設(shè)一個(gè)boolean類型的標(biāo)志,并通過(guò)設(shè)置這個(gè)標(biāo)志為true或false來(lái)控制while循環(huán)是否退出。下面給出了一個(gè)利用退出標(biāo)志終止線程的例子。
在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。通過(guò)這些方法,我們可以對(duì)線程進(jìn)行方便的操作,但是這些方法中,只有start()方法得到了保留。\x0d\x0a在Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中詳細(xì)講解了舍棄這些方法的原因。\x0d\x0a如果真的需要終止一個(gè)線程,可以使用以下幾種方法: \x0d\x0a1、讓線程的run()方法執(zhí)行完,線程自然結(jié)束。(這種方法最好)\x0d\x0a\x0d\x0a2、通過(guò)輪詢和共享標(biāo)志位的方法來(lái)結(jié)束線程,例如while(flag){},flag的初始值設(shè)為真,當(dāng)需要結(jié)束時(shí),將flag的值設(shè)為false。(這種方法也不很好,因?yàn)槿绻鹷hile(flag){}方法阻塞了,則flag會(huì)失效)\x0d\x0a如果線程因?yàn)閳?zhí)行sleep()或是wait()而進(jìn)入Not Runnable狀態(tài),假如是wait() 用標(biāo)志位就方法就不行了,\x0d\x0apublic final void wait(long timeout)\x0d\x0a throws InterruptedException此方法導(dǎo)致當(dāng)前線程(稱之為 T)將其自身放置在對(duì)象的等待集中,然后放棄此對(duì)象上的所有同步要求。即當(dāng)前線程變?yōu)榈却隣顟B(tài)\x0d\x0await() 的標(biāo)準(zhǔn)使用方法\x0d\x0asynchronized(obj){\x0d\x0awhile(){\x0d\x0aobj.wait();\x0d\x0a}\x0d\x0a滿足條件的處理過(guò)程\x0d\x0a}\x0d\x0a而您想要停止它,您可以使用第三種即\x0d\x0a3 使用interrupt(),而程式會(huì)丟出InterruptedException例外,因而使得執(zhí)行緒離開(kāi)run()方法
網(wǎng)頁(yè)名稱:java停止線程代碼 java 線程停止
分享地址:http://www.kartarina.com/article36/hhodpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、網(wǎng)站營(yíng)銷、營(yíng)銷型網(wǎng)站建設(shè)、App設(shè)計(jì)、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容