簡體   English   中英

在生產者/消費者等多線程程序中,Swallowing InterruptedException的目的是什么

[英]In the multi-thread program like producer/consumer, what's the purpose of Swallowing InterruptedException

有些代碼只調用catch(ex。InterruptedException){},為什么呢?

這通常表示開發人員不知道如何處理Exception,因此只是忽略了它。

這是一種不良行為,導致某些人說檢查異常是失敗的實驗。 恕我直言,開發人員應該只學習處理異常。

處理此異常的更好方法是

  • 將其傳遞給呼叫者。 即不要抓住它。
  • 調用Thread.currentThread()。interrupt(),以使中斷不會丟失。
  • 如果這樣的異常不可能發生,則將其包裝為一個throw new AssertionError(ex)

這用於可能發生異常但對異常的響應與try塊的正常繼續相同的情況。 一個常見的示例是調用sleep()。 (但是,實際上這通常是一個不好的例子,因為被打斷通常表明應該放棄操作。)

InterruptedException是所謂的檢查異常。 當添加到要調用的方法時,這是一種表示必須考慮這種情況的方法,即,系統中的另一個線程可能會搶占處理調用結果所需的時間。

暫時假設您在try塊中有6-7條語句,並假設它們將以或多或少的原子方式運行。 這些語句中有一個依賴線程感知行為。 如果該呼叫被搶占,則后續的語句將不會運行,並且您將不得不處理后果。

人們有各種原因來捕獲此異常,但不采取任何措施。 我想不出這樣做的許多好理由,除非我能清楚地表明被打擾不會在我的代碼中產生不良的副作用。 給定任何顯示這種行為的示例代碼,我猜想其中沒有捕獲邏輯,因為a)程序員沒有應對它的計划; b)程序員只想跳過檢查,以便代碼編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM