欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java InterruptedException 異常中斷的實現(xiàn)

 更新時間:2023年08月04日 09:04:39   作者:FLGB  
本文主要介紹了java InterruptedException 異常中斷的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

InterruptedException

當一個線程在被阻塞狀態(tài)(如調(diào)用 Thread.sleep() 或 Object.wait() 方法)時,如果其他線程調(diào)用該被阻塞線程的 interrupt() 方法,那么被阻塞線程會被中斷,并拋出 InterruptedException 異常。

package com.lf.java.basic.concurrent;
class MyRunnable implements Runnable {
? ? @Override
? ? public void run() {
? ? ? ? try {
? ? ? ? ? ? // 被阻塞的線程,調(diào)用sleep方法
? ? ? ? ? ? Thread.sleep(5000);
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? // 被中斷時會拋出InterruptedException異常
? ? ? ? ? ? System.out.println("Thread was interrupted.");
? ? ? ? ? ? // 可以選擇終止線程的執(zhí)行
? ? ? ? ? ? // return;
? ? ? ? }
? ? ? ? System.out.println("被喚醒了處理Exception后可以自由選擇做什么事");
? ? ? ? System.out.println("Thread completed.");
? ? }
}
public class InterruptedExceptionSample {
? ? public static void main(String[] args) {
? ? ? ? Thread thread = new Thread(new MyRunnable());
? ? ? ? thread.start();
? ? ? ? // 主線程休眠一段時間后,中斷被阻塞的線程
? ? ? ? try {
? ? ? ? ? ? Thread.sleep(2000);
? ? ? ? ? ? thread.interrupt();
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}

輸出:

Thread was interrupted.
被喚醒了處理Exception后可以自由選擇做什么事
Thread completed.

1、被阻塞的線程處于阻塞狀態(tài),比如調(diào)用了 Thread.sleep() 或 Object.wait() 方法。

2、其他線程調(diào)用了被阻塞線程的 interrupt() 方法。

3、被阻塞線程會被喚醒,它會檢查自己是否被中斷,如果被中斷,就會拋出 InterruptedException 異常。

4、此時,被阻塞線程可以選擇如何處理這個異常,比如捕獲異常并做相應(yīng)的處理,或者繼續(xù)向上層拋出異常。

注意:
中斷是一種協(xié)作機制,它并不能直接終止一個線程的執(zhí)行。被中斷的線程需要在適當?shù)臅r候檢查自己是否被中斷,并做出相應(yīng)的響應(yīng)。在處理 InterruptedException 時,可以選擇終止線程的執(zhí)行或采取其他合適的措施來處理中斷。(存在不能被中斷的阻塞 I/O 調(diào)用, 應(yīng)該考慮選擇可中斷的調(diào) =用)。

interrupted() 方法(靜態(tài)方法)

public static boolean interrupted()

interrupted() 方法是一個靜態(tài)方法,用于檢測當前線程是否被中斷,并且會清除中斷狀態(tài)。當一個線程被中斷時,該線程的中斷狀態(tài)會被設(shè)置為 true。當你調(diào)用 interrupted() 方法時,它會返回當前線程的中斷狀態(tài),并且同時將中斷狀態(tài)重置為 false。這意味著,如果連續(xù)多次調(diào)用 interrupted() 方法,只有第一次會返回 true,之后的調(diào)用將返回 false,除非線程又被重新中斷。

public class InterruptedSample {
? ? public static void main(String[] args) {
? ? ? ? Thread thread = new Thread(() -> {
? ? ? ? ? ? for (int i = 0; i < 5; i++) {
? ? ? ? ? ? ? ? if (Thread.interrupted()) {
? ? ? ? ? ? ? ? ? ? System.out.println("Thread is interrupted.");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? System.out.println("Thread is not interrupted.");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? thread.start();
? ? ? ? // 主線程休眠一段時間后,中斷被阻塞的線程
? ? ? ? try {
? ? ? ? ? ? Thread.sleep(2000);
? ? ? ? ? ? thread.interrupt();
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}

isInterrupted() 方法(實例方法)

public boolean isInterrupted()

isInterrupted() 方法是一個實例方法,用于檢查當前線程的中斷狀態(tài),但不會清除中斷狀態(tài)。當你調(diào)用 isInterrupted() 方法時,它會返回當前線程的中斷狀態(tài),并且不會改變中斷狀態(tài)。因此,多次調(diào)用 isInterrupted() 方法會一直返回相同的中斷狀態(tài),不會重置為 false。

public class IsInterruptedSample {
? ? public static void main(String[] args) {
? ? ? ? Thread thread = new Thread(() -> {
? ? ? ? ? ? for (int i = 0; i < 5; i++) {
? ? ? ? ? ? ? ? if (Thread.currentThread().isInterrupted()) {
? ? ? ? ? ? ? ? ? ? System.out.println("Thread is interrupted.");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? System.out.println("Thread is not interrupted.");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? thread.start();
? ? ? ? // 主線程休眠一段時間后,中斷被阻塞的線程
? ? ? ? try {
? ? ? ? ? ? Thread.sleep(2000);
? ? ? ? ? ? thread.interrupt();
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
}

到此這篇關(guān)于java InterruptedException 異常中斷的實現(xiàn)的文章就介紹到這了,更多相關(guān)java InterruptedException 異常中斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 如何實現(xiàn)正確的刪除集合中的元素

    java 如何實現(xiàn)正確的刪除集合中的元素

    這篇文章主要介紹了java 如何實現(xiàn)正確的刪除集合中的元素,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java設(shè)計模式之動態(tài)代理

    Java設(shè)計模式之動態(tài)代理

    今天小編就為大家分享一篇關(guān)于Java設(shè)計模式之動態(tài)代理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • SpringAnimation 實現(xiàn)菜單從頂部彈出從底部消失動畫效果

    SpringAnimation 實現(xiàn)菜單從頂部彈出從底部消失動畫效果

    最近做項目遇到這樣一個需求,要求實現(xiàn)一種菜單,菜單從頂部彈入,然后從底部消失,頂部彈入時,有一個上下抖動的過程,底部消失時,先向上滑動,然后再向下滑動消失。下面給大家?guī)砹藢崿F(xiàn)代碼,感興趣的朋友一起看看吧
    2018-05-05
  • Java實現(xiàn)布隆過濾器的幾種方式總結(jié)

    Java實現(xiàn)布隆過濾器的幾種方式總結(jié)

    這篇文章給大家總結(jié)了幾種Java實現(xiàn)布隆過濾器的方式,手動硬編碼實現(xiàn),引入Guava實現(xiàn),引入hutool實現(xiàn),通過redis實現(xiàn)等幾種方式,文中有詳細的代碼和圖解,需要的朋友可以參考下
    2023-07-07
  • springboot集成KoTime的配置過程

    springboot集成KoTime的配置過程

    koTime是一個springboot項目性能分析工具,通過追蹤方法調(diào)用鏈路以及對應(yīng)的運行時長快速定位性能瓶頸,這篇文章主要介紹了springboot集成KoTime,需要的朋友可以參考下
    2022-06-06
  • 使用spring.profiles.active來分區(qū)配置的方法示例

    使用spring.profiles.active來分區(qū)配置的方法示例

    這篇文章主要介紹了使用spring.profiles.active來分區(qū)配置的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java信號量Semaphore原理及代碼實例

    Java信號量Semaphore原理及代碼實例

    這篇文章主要介紹了Java信號量Semaphore原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java設(shè)計模式之責任鏈模式詳解

    Java設(shè)計模式之責任鏈模式詳解

    客戶端發(fā)出一個請求,鏈上的對象都有機會來處理這一請求,而客戶端不需要知道誰是具體的處理對象。這樣就實現(xiàn)了請求者和接受者之間的解耦,并且在客戶端可以實現(xiàn)動態(tài)的組合職責鏈。使編程更有靈活性
    2022-07-07
  • 深入理解java泛型詳解

    深入理解java泛型詳解

    這篇文章主要介紹了Java中的泛型詳解,什么是泛型,作用以及基礎(chǔ)實例等,喜歡的朋友可以參考
    2017-04-04
  • 出現(xiàn)log.info報紅的解決方案

    出現(xiàn)log.info報紅的解決方案

    這篇文章主要介紹了出現(xiàn)log.info報紅的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論