本節(jié)主要討論一個(gè)問(wèn)題,如何在Java中取消或關(guān)閉一個(gè)線(xiàn)程?
取消/關(guān)閉的場(chǎng)景
我們知道,通過(guò)線(xiàn)程的start方法啟動(dòng)一個(gè)線(xiàn)程后,線(xiàn)程開(kāi)始執(zhí)行run方法,run方法運(yùn)行結(jié)束后線(xiàn)程退出,那為什么還需要結(jié)束一個(gè)線(xiàn)程呢?有多種情況,比如說(shuō):
很多線(xiàn)程的運(yùn)行模式是死循環(huán),比如在生產(chǎn)者/消費(fèi)者模式中,消費(fèi)者主體就是一個(gè)死循環(huán),它不停的從隊(duì)列中接受任務(wù),執(zhí)行任務(wù),在停止程序時(shí),我們需要一種"優(yōu)雅"的方法以關(guān)閉該線(xiàn)程。
在一些圖形用戶(hù)界面程序中,線(xiàn)程是用戶(hù)啟動(dòng)的,完成一些任務(wù),比如從遠(yuǎn)程服務(wù)器上下載一個(gè)文件,在下載過(guò)程中,用戶(hù)可能會(huì)希望取消該任務(wù)。
在一些場(chǎng)景中,比如從第三方服務(wù)器查詢(xún)一個(gè)結(jié)果,我們希望在限定的時(shí)間內(nèi)得到結(jié)果,如果得不到,我們會(huì)希望取消該任務(wù)。
有時(shí),我們會(huì)啟動(dòng)多個(gè)線(xiàn)程做同一件事,比如類(lèi)似搶火車(chē)票,我們可能會(huì)讓多個(gè)好友幫忙從多個(gè)渠道買(mǎi)火車(chē)票,只要有一個(gè)渠道買(mǎi)到了,我們會(huì)通知取消其他渠道。
取消/關(guān)閉的機(jī)制
Java的Thread類(lèi)定義了如下方法:
public final void stop()
這個(gè)方法看上去就可以停止線(xiàn)程,但這個(gè)方法被標(biāo)記為了過(guò)時(shí),簡(jiǎn)單的說(shuō),我們不應(yīng)該使用它,可以忽略它。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線(xiàn)安全]玩轉(zhuǎn)無(wú)線(xiàn)電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26
