亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

在Java程序的主線程中調(diào)用System.exit(0)和Thread.currentThread()。interrupt()有什么區(qū)別?

瀏覽:98日期:2024-04-30 13:01:42
如何解決在Java程序的主線程中調(diào)用System.exit(0)和Thread.currentThread()。interrupt()有什么區(qū)別??摘要thread.interrupt()不停止線程。它用于多線程程序中的協(xié)調(diào)。除非您確切知道自己的工作,否則不要使用它。拋出RuntimeException遺囑(通常)會(huì)終止線程,但不一定終止程序。System.exit(int) 幾乎 總是終止程序并返回狀態(tài)碼。在特殊情況下,System.exit(int)可能實(shí)際上并未停止該程序。Runtime.getRuntime().halt(int)另一方面,總是如此。線程中斷

恐怕你的第一句話錯(cuò)了。Thread.currentThread().interrupt()不會(huì)停止線程或程序。

中斷線程是發(fā)信號(hào)通知它 應(yīng)該 停止的一種方式,但這是一種合作的努力:線程中的代碼應(yīng)不時(shí)檢查中斷狀態(tài),并且(在大多數(shù)情況下-但這只是可選的)如果已被中斷則停止。如果不這樣做,將不會(huì)發(fā)生任何事情。

具體來(lái)說(shuō),中斷線程(任何線程,包括當(dāng)前正在執(zhí)行的線程)只會(huì)設(shè)置 中斷標(biāo)志。標(biāo)準(zhǔn)庫(kù)中的某些方法將引發(fā)InterruptedException,但這也只是一種信號(hào),表明線程已被中斷。在這種情況下應(yīng)該做什么取決于該線程中運(yùn)行的代碼。

以下是Brian Goetz撰寫的 Java Concurrency in Practice 一書(shū)中的相關(guān)部分:

線程提供了用于中斷線程和查詢線程是否已被中斷的中斷方法。每個(gè)線程都有一個(gè)布爾屬性,表示其中斷狀態(tài)。中斷線程將設(shè)置此狀態(tài)。

中斷是一種合作機(jī)制。一個(gè)線程無(wú)法強(qiáng)迫另一個(gè)線程停止正在執(zhí)行的操作并執(zhí)行其他操作。當(dāng)線程A中斷線程B時(shí),A只是請(qǐng)求B在感覺(jué)到方便的停止點(diǎn)時(shí)停止其正在做的事情。盡管API或語(yǔ)言規(guī)范中沒(méi)有任何內(nèi)容要求任何特定的應(yīng)用程序級(jí)語(yǔ)義中斷,中斷最明智的用途是取消活動(dòng)。響應(yīng)中斷的阻止方法使更容易及時(shí)取消長(zhǎng)時(shí)間運(yùn)行的活動(dòng)。

異常和System.exit(int)

的JavadocSystem.exit(int)說(shuō):

參數(shù)用作狀態(tài)碼;按照慣例,非零狀態(tài)代碼表示異常終止。

因此,調(diào)用exit()(幾乎)肯定會(huì)停止您的程序。與RuntimeException引發(fā)(或Error)相比,它不能在調(diào)用堆棧的下方捕獲,它也不取決于是否正在運(yùn)行其他線程。另一方面,未捕獲的異常會(huì)終止引發(fā)該異常的線程,但是如果有其他(非守護(hù)程序)線程,該程序?qū)⒗^續(xù)運(yùn)行。

引發(fā)Exception的另一個(gè)區(qū)別是不會(huì)exit()將任何內(nèi)容打印到控制臺(tái)(未捕獲的異常也是如此),而是使程序返回特定的狀態(tài)代碼。狀態(tài)代碼有時(shí)用在Shell或批處理腳本中,但除此之外,它們不是很有用。

Runtime.halt(int)

最后(出于完整性考慮),我想指出退出Java程序的第三種可能性。當(dāng)System.exit(int)調(diào)用(或程序以其他方式結(jié)束)時(shí),運(yùn)行時(shí)將在Java虛擬機(jī)停止之前執(zhí)行一些清理工作。這在Runtime.exit(int)的Javadoc中進(jìn)行了描述(稱為System.exit(int):

虛擬機(jī)的關(guān)閉序列包括兩個(gè)階段。在第一階段,所有已注冊(cè)的關(guān)閉掛接(如果有)以某種未指定的順序啟動(dòng),并允許并發(fā)運(yùn)行直到它們完成。在第二階段,如果啟用了退出時(shí)終結(jié),則所有未調(diào)用的終結(jié)器都將運(yùn)行。完成此操作后,虛擬機(jī)將停止。

如果由于死鎖等原因?qū)е氯魏侮P(guān)閉掛鉤或終結(jié)器無(wú)法完成,則該程序可能永遠(yuǎn)不會(huì)真正退出。保證JVM停止的唯一方法是Runtime.halt(int):

使用此方法時(shí)應(yīng)格外小心。與退出方法不同,此方法不會(huì)導(dǎo)致啟動(dòng)關(guān)閉掛鉤,并且如果啟用了退出時(shí)終結(jié)處理,則不會(huì)運(yùn)行未調(diào)用的終結(jié)器。

解決方法

兩者都會(huì)導(dǎo)致程序停止執(zhí)行。顯然,這種情況的發(fā)生方式必須有所不同。這些是什么?

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 亚洲五月综合缴情婷婷 | 久久人人精品 | 免费看日韩欧美一级毛片 | 中文xxx视频 | 黄色在线视频网址 | 91精品免费观看 | 久久精品视频在线观看榴莲视频 | 国产在线激情视频 | 永久福利视频 | 多人性激烈的欧美三级视频 | 中国一级毛片录像 | 一区二区视频在线观看高清视频在线 | 成人精品一区二区www | 国产成人aaa在线视频免费观看 | 无码免费一区二区三区免费播放 | 国产91免费在线 | 91青青草视频在线观看 | 丁香婷婷综合五月六月 | 特黄色片 | 91网站桃色 | 久久成人精品免费播放 | 国产精品嫩草影院人体模特 | yy8090韩国日本三理论免费 | 亚洲欧美在线精品一区二区 | 国产1024在线永久免费观看 | 青青综合 | 久久午夜鲁丝片午夜精品 | 美国免费毛片性视频 | 国产成人亚洲综合一区 | 九九在线偷拍视频在线播放 | 自拍第一页 | 亚洲国产成人91精品 | 在线观看黄色影视 | 成年免费大片黄在线观看岛国 | 欧美三级不卡 | 久久精品国产一区二区三区不卡 | 国产精品免费观看 | 成年美女黄网站色视频大全免费 | 日本强不卡在线观看 | 成人黄色片在线观看 | 国产精品视频国产永久视频 |