第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在Java中啟動(dòng)/停止/重啟線程?

如何在Java中啟動(dòng)/停止/重啟線程?

紅顏莎娜 2019-07-27 14:14:02
如何在Java中啟動(dòng)/停止/重啟線程?我真的很難找到一種方法來(lái)啟動(dòng),停止和重新啟動(dòng)Java中的線程。具體來(lái)說(shuō),我在一個(gè)文件中有一個(gè)類Task(當(dāng)前實(shí)現(xiàn)Runnable)Task.java。我的主應(yīng)用程序需要能夠在一個(gè)線程上啟動(dòng)此任務(wù),在需要時(shí)停止(終止)該線程,有時(shí)需要KILL&RESTART線程......我的第一次嘗試是,ExecutorService但我似乎找不到重啟任務(wù)的方法。當(dāng)我使用.shutdownnow()任何未來(lái)的電話.execute()失敗,因?yàn)樗麰xecutorService是“關(guān)機(jī)”...那么,我怎么能做到這一點(diǎn)?
查看完整描述

3 回答

?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

線程停止后,您無(wú)法重新啟動(dòng)它。但是,沒(méi)有什么能阻止您創(chuàng)建和啟動(dòng)新線程。


選項(xiàng)1:創(chuàng)建新線程而不是嘗試重新啟動(dòng)。


選項(xiàng)2:不要讓線程停止,讓它等待,然后當(dāng)它收到通知時(shí),你可以讓它再次工作。這樣線程永遠(yuǎn)不會(huì)停止,永遠(yuǎn)不需要重新啟動(dòng)。


根據(jù)評(píng)論進(jìn)行編輯:


要“殺死”線程,您可以執(zhí)行以下操作。


yourThread.setIsTerminating(true); // tell the thread to stop

yourThread.join(); // wait for the thread to stop


查看完整回答
反對(duì) 回復(fù) 2019-07-27
?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

除非在該線程中運(yùn)行的代碼檢查并允許終止,否則無(wú)法終止線程。

你說(shuō):“可悲的是我必須殺死/重啟它......我沒(méi)有完全控制線程的內(nèi)容,對(duì)于我的情況,它需要重新啟動(dòng)”

如果線程的內(nèi)容不允許終止其exectuion,那么你就無(wú)法終止該線程。

在你的帖子中你說(shuō):“我的第一次嘗試是使用ExecutorService,但我似乎找不到重啟任務(wù)的方法。當(dāng)我使用.shutdownnow()......”

如果查看“shutdownnow”的來(lái)源,它只會(huì)運(yùn)行并中斷當(dāng)前運(yùn)行的線程。這不會(huì)停止執(zhí)行,除非這些線程中的代碼檢查它是否已被打亂,如果是,則自行停止執(zhí)行。因此,shutdownnow可能沒(méi)有按照你的想法行事。

讓我說(shuō)明當(dāng)我說(shuō)線程的內(nèi)容必須允許該線程被終止時(shí)我的意思:

myExecutor.execute(new Runnable() {
 public void run() {
  while (true) {
    System.out.println("running");
  }
 }
 });myExecutor.shutdownnow();

該線程將繼續(xù)運(yùn)行,即使調(diào)用了shutdownnow,因?yàn)樗肋h(yuǎn)不會(huì)檢查它是否已被終止。但是,該線程將關(guān)閉:

myExecutor.execute(new Runnable() {
 public void run() {
  while (!Thread.interrupted()) {
    System.out.println("running");
  }
 }
 });myExecutor.shutdownnow();

由于該線程檢查它是否已被中斷/關(guān)閉/終止。

因此,如果您想要一個(gè)可以關(guān)閉的線程,您需要確保它檢查它是否已被中斷。如果你想要一個(gè)可以“關(guān)閉”和“重新啟動(dòng)”的線程,你就可以創(chuàng)建一個(gè)可以執(zhí)行前面提到的新任務(wù)的runnable。

為什么不能關(guān)閉正在運(yùn)行的線程?好吧,我實(shí)際上撒謊,你可以調(diào)用“yourThread.stop()”,但為什么這是一個(gè)壞主意?當(dāng)你停止它時(shí),線程可以處于同步(或其他關(guān)鍵部分,但我們將限制自己使用這里的同步關(guān)鍵字保護(hù)的部分)部分代碼。synch塊應(yīng)該在它們的整數(shù)中執(zhí)行,并且在被其他一些線程訪問(wèn)之前只能由一個(gè)線程執(zhí)行。如果在同步塊中間停止某個(gè)線程,則synch塊保護(hù)的保護(hù)將失效,程序?qū)⑦M(jìn)入未知狀態(tài)。開(kāi)發(fā)人員將內(nèi)容置于同步塊中以保持同步,如果使用threadInstance.stop()則會(huì)破壞同步的含義,


查看完整回答
反對(duì) 回復(fù) 2019-07-27
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

回顧java.lang.Thread


要啟動(dòng)或重新啟動(dòng)(一旦線程停止,您就無(wú)法重新啟動(dòng)相同的線程,但這并不重要;只需創(chuàng)建一個(gè)新Thread實(shí)例):


// Create your Runnable instance

Task task = new Task(...);


// Start a thread and run your Runnable

Thread t = new Thread(task);

要停止它,請(qǐng)?jiān)谀腡ask實(shí)例上設(shè)置一個(gè)方法,設(shè)置一個(gè)標(biāo)志來(lái)告訴run方法退出; 從run退出線程返回。如果您的調(diào)用代碼需要知道線程在返回之前已經(jīng)停止了,您可以使用join:


// Tell Task to stop

task.setStopFlag(true);


// Wait for it to do so

t.join();

關(guān)于重新啟動(dòng):即使Thread無(wú)法重新啟動(dòng),也可以使用Runnable新線程重用您的實(shí)例,如果它具有狀態(tài)并且您想要保留; 這是相同的事情。只需確保您Runnable的設(shè)計(jì)允許多次通話run。


查看完整回答
反對(duì) 回復(fù) 2019-07-27
  • 3 回答
  • 0 關(guān)注
  • 4129 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)