日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内核中断处理流程_处理中断

發布時間:2023/12/3 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核中断处理流程_处理中断 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內核中斷處理流程

我只是在觀看Heinz Kabutz的VJUG采訪 ,這啟發了我寫一篇有關中斷的文章。 順便說一句,我建議您訂閱VJUG YouTube頻道 -確實非常有用。

Heinz始終是物有所值的,很難不學習很多東西就很難觀看他的演講。 他提出了如何處理InterruptedException的主題,并假設很少有Java程序員可以正確地處理它。 我所讀的關于Java的最喜歡的書– Java Concurrency In Practice (p138-144)中包含了我所閱讀的關于線程中斷的最佳解釋。 如果您已閱讀這些頁面,您將知道如何正確處理InterruptedException :-)

這是一個簡短的摘要:

您多久遇到一次此代碼:

....... try {Thread.sleep(1000); } catch(InterruptedException e){e.printStackTrace(); } ......

一個進程需要Hibernate一秒鐘,但“煩人”必須處理InterruptedException 。 開發人員實際上并不知道如何處理此異常,因此只需將其記錄到控制臺即可。

這是非常不好的做法! 如果您確定線程永遠不會中斷(您是在封閉系統中編寫此代碼),則可能應該執行類似的操作,例如在catch塊中拋出AssertionError并添加注釋,以免發生這種情況。 如果完全有可能線程被中斷,那么您需要正確處理該中斷。

可以通過調用其interrupt()方法來中斷線程。 這會將其中斷狀態設置為true,因此當您調用isInterrupted()將返回true。 當調用interrupt() ,某些阻塞方法,例如Thread.sleep()將拋出InterruptedException 。 請注意,觸發InterruptedException會將中斷狀態設置為false。 線程上有一個名為interrupted()的方法,該方法像isInterrupted()返回線程的中斷狀態,但關鍵是將中斷狀態設置回false。 ( interrupted()是一個非常奇怪的命名方法,…)

在以下示例中,我們可以看到所有這些工作:

package util;/*** Created by daniel on 16/04/15.*/ public class Interrupt {public static void main(String[] args) {Thread sleeperThread = new Thread(){public void run(){try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println(isInterrupted()); //prints falseinterrupt();System.out.println(isInterrupted()); //prints trueSystem.out.println(interrupted()); //prints trueSystem.out.println(isInterrupted()); //prints false}}};sleeperThread.start();sleeperThread.interrupt();} }

在實踐中引用Java并發性:

“ API或語言規范中沒有任何內容可以將中斷與任何特定的取消語義聯系起來,但實際上,對除中斷之外的任何事物使用中斷都是脆弱的,并且在大型應用程序中難以維持?!?

換句話說,中斷只是一個信號。 從理論上講,您可以使用中斷機制來指示線程執行所需的任何操作,也許可以執行操作A而不是執行操作B –但是我們建議您不要這樣做。

....... try {Thread.sleep(1000); } catch(InterruptedException e){actionA();return; } actionB(); ......

那么處理中斷的正確方法是什么。 好吧,這取決于您的代碼。 假設我們使用“正確”的中斷作為取消,并且您的代碼希望發生取消(應在文檔中指定),那么您的代碼應以受控方式取消其操作。 僅僅因為拋出異常并不意味著您必須匆忙退出而將一團糟留在身后。 因為您已經處理了中斷,所以無需恢復線程上的中斷狀態。

如果您不希望中斷,那么您應該適當地處理該中斷(也許完成您正在做的事情),然后在線程上恢復該中斷,以便在堆棧上端處理一些代碼。 請記住,一旦引發異常,中斷狀態將設置為false。 這是應該如何完成的方式(摘自本書的代碼):

public Task getNextTask(BlockingQueue<Task> queue){boolean interrupted = false;try{while(true){try{return queue.take();}catch(InterruptedException e){interrupted = true;//retry}}}finally {if(interrupted){Thread.currentThread().interrupt();}}}

翻譯自: https://www.javacodegeeks.com/2015/04/dealing-with-interruptions.html

內核中斷處理流程

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的内核中断处理流程_处理中断的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。