本節(jié)主要討論一個(gè)問(wèn)題,如何在Java中取消或關(guān)閉一個(gè)線程?

取消/關(guān)閉的場(chǎng)景

我們知道,通過(guò)線程的start方法啟動(dòng)一個(gè)線程后,線程開(kāi)始執(zhí)行run方法,run方法運(yùn)行結(jié)束后線程退出,那為什么還需要結(jié)束一個(gè)線程呢?有多種情況,比如說(shuō):

  • 很多線程的運(yùn)行模式是死循環(huán),比如在生產(chǎn)者/消費(fèi)者模式中,消費(fèi)者主體就是一個(gè)死循環(huán),它不停的從隊(duì)列中接受任務(wù),執(zhí)行任務(wù),在停止程序時(shí),我們需要一種"優(yōu)雅"的方法以關(guān)閉該線程。

  • 在一些圖形用戶界面程序中,線程是用戶啟動(dòng)的,完成一些任務(wù),比如從遠(yuǎn)程服務(wù)器上下載一個(gè)文件,在下載過(guò)程中,用戶可能會(huì)希望取消該任務(wù)。

  • 在一些場(chǎng)景中,比如從第三方服務(wù)器查詢一個(gè)結(jié)果,我們希望在限定的時(shí)間內(nèi)得到結(jié)果,如果得不到,我們會(huì)希望取消該任務(wù)。

  • 有時(shí),我們會(huì)啟動(dòng)多個(gè)線程做同一件事,比如類似搶火車票,我們可能會(huì)讓多個(gè)好友幫忙從多個(gè)渠道買火車票,只要有一個(gè)渠道買到了,我們會(huì)通知取消其他渠道。

取消/關(guān)閉的機(jī)制

Java的Thread類定義了如下方法:

public final void stop()

這個(gè)方法看上去就可以停止線程,但這個(gè)方法被標(biāo)記為了過(guò)時(shí),簡(jiǎn)單的說(shuō),我們不應(yīng)該使用它,可以忽略它。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式