亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

sleep()使用問題

感謝你無私的奉獻,讓我了解到為什么不用不用stop(),推薦的標志的方式。

我也想再問一句:為什么不使用sleep()呢。

? 1.我可以在方法中捕捉InterruptedException 時候 處理異常并且用ruturn;


? 2.我看到官方自帶的線程池Exceutor中的shutdownNow也是使用 interrupte()的如下:

java.util.concurrent.ThreadPoolExecutor中的

?private void interruptWorkers() {
??????? final ReentrantLock mainLock = this.mainLock;
??????? mainLock.lock();
??????? try {
??????????? for (Worker w : workers) {
??????????????? try {
??????????????????? w.thread.interrupt();
??????????????? } catch (SecurityException ignore) {
??????????????? }
??????????? }
??????? } finally {
??????????? mainLock.unlock();
??????? }
??? }

我看到網上是說 interrupte()不能中斷IO。





正在回答

1 回答

問題還是回到interrupte()方法的初衷,這個方法是用來向線程發出中斷請求,而非停止線程的。當然很多時候要停止線程就需要先給他一個中斷請求,然后讓線程處理中斷(比如處理InterruptedException)。


在你提到的shutdownNow中,我們看到調用interruptWorkers()也是這個意思,讓所有的worker線程有機會處理中斷。緊接著,tryTerminate()回去做停止的工作。


public List<Runnable> shutdownNow() {

? ? ? ? List<Runnable> tasks;

? ? ? ? final ReentrantLock mainLock = this.mainLock;

? ? ? ? mainLock.lock();

? ? ? ? try {

? ? ? ? ? ? checkShutdownAccess();

? ? ? ? ? ? advanceRunState(STOP);

? ? ? ? ? ? interruptWorkers();

? ? ? ? ? ? tasks = drainQueue();

? ? ? ? } finally {

? ? ? ? ? ? mainLock.unlock();

? ? ? ? }

? ? ? ? tryTerminate();

? ? ? ? return tasks;

? ? }


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
深入淺出Java多線程
  • 參與學習       186068    人
  • 解答問題       502    個

帶你一起深入淺出多線程,掌握基礎,展望進階路線

進入課程

sleep()使用問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號