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

Java主線程捕獲子線程異常的實(shí)現(xiàn)

 更新時(shí)間:2024年04月16日 10:55:29   作者:子時(shí)已過(guò)  
本文主要介紹了Java主線程捕獲子線程異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

正常情況下使用多線程出現(xiàn)異常時(shí),都是按照單個(gè)任務(wù)去處理異常,在線程間不需要通信的情況下,任務(wù)之間互不影響,主線程也不必知道子線程是否發(fā)成異常。

那么只需要處理子線程異常即可

Task.Run(() =>
{
    try
    {
        throw new Exception("error message");
    }
    catch (Exception ex)
    {
        Console.WriteLine("出現(xiàn)異常,記錄日志,業(yè)務(wù)回滾等等...");
    }
});

但是在某些復(fù)雜業(yè)務(wù)中,多個(gè)線程在執(zhí)行過(guò)程中如果出現(xiàn)異常需要反饋給主線程,所以需要在子線程出現(xiàn)異常時(shí)通知主線程。

實(shí)現(xiàn)方式:

  • 使用Task.WaitAll,使主線程阻塞。
try
{
    List<Task> tasks = new List<Task>();
    tasks.Add(Task.Run(() => {
        throw new Exception("error message");
    }));
    Task.WaitAll(tasks.ToArray());
}
catch (AggregateException ex)
{
    foreach (var except in ex.InnerExceptions)
    {
        Console.WriteLine(except.Message);
    }
}

執(zhí)行結(jié)果:

在這里插入圖片描述

2. 使用非阻塞Task.Factory.ContinueWhenAll

List<Task> tasks = new List<Task>();
tasks.Add(Task.Run(() => {
    throw new Exception("error message");
}));
//Task.WaitAll(tasks.ToArray());
Task.Factory.ContinueWhenAll(tasks.ToArray(),
    t =>
    {
        foreach (var task in t)
        {
            if (task.IsFaulted)
            {
                AggregateException aggEx = task.Exception;
                Console.WriteLine(aggEx.Message);
            }
        }
    });

打印結(jié)果:

One or more errors occurred. (error message)

到此這篇關(guān)于Java主線程捕獲子線程異常的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java主線程捕獲子線程異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Prometheus pushgateway的使用詳解

    Prometheus pushgateway的使用詳解

    為了防止 pushgateway 重啟或意外掛掉,導(dǎo)致數(shù)據(jù)丟失,我們可以通過(guò) -persistence.file 和 -persistence.interval 參數(shù)將數(shù)據(jù)持久化下來(lái),接下來(lái)通過(guò)本文給大家介紹下Prometheus pushgateway的使用,感興趣的朋友一起看看吧
    2021-11-11
  • Java實(shí)現(xiàn)用位運(yùn)算維護(hù)狀態(tài)碼

    Java實(shí)現(xiàn)用位運(yùn)算維護(hù)狀態(tài)碼

    位運(yùn)算是一種非常高效的運(yùn)算方式,在算法考察中比較常見(jiàn),那么業(yè)務(wù)代碼中我們?nèi)绾问褂梦贿\(yùn)算呢,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2024-03-03
  • Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題

    Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題

    這篇文章主要介紹了Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • springBoot使用JdbcTemplate代碼實(shí)例

    springBoot使用JdbcTemplate代碼實(shí)例

    這篇文章主要介紹了springBoot使用JdbcTemplate代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java反編譯工具jd-gui-osx?for?mac?M1芯片無(wú)法使用的問(wèn)題及解決

    java反編譯工具jd-gui-osx?for?mac?M1芯片無(wú)法使用的問(wèn)題及解決

    這篇文章主要介紹了java反編譯工具jd-gui-osx?for?mac?M1芯片無(wú)法使用的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MyBatisPlus3.x中使用代碼生成器(全注釋)

    MyBatisPlus3.x中使用代碼生成器(全注釋)

    這篇文章主要介紹了MyBatisPlus3.x中使用代碼生成器(全注釋),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot中@EnableAutoConfiguration和@Configuration的區(qū)別

    SpringBoot中@EnableAutoConfiguration和@Configuration的區(qū)別

    這篇文章主要介紹了SpringBoot中@EnableAutoConfiguration和@Configuration的區(qū)別,@SpringBootApplication相當(dāng)于@EnableAutoConfiguration,@ComponentScan,@Configuration三者的集合,需要的朋友可以參考下
    2023-08-08
  • SpringBoot利用Redis解決海量重復(fù)提交問(wèn)題

    SpringBoot利用Redis解決海量重復(fù)提交問(wèn)題

    本文主要介紹了SpringBoot利用Redis解決海量重復(fù)提交問(wèn)題,介紹了三種常見(jiàn)的解決方案,包括使用Redis計(jì)數(shù)器,使用Redis分布式鎖和使用Redis發(fā)布/訂閱機(jī)制,感興趣的可以了解一下
    2024-03-03
  • PC 端微信掃碼注冊(cè)和登錄實(shí)例

    PC 端微信掃碼注冊(cè)和登錄實(shí)例

    這篇文章主要介紹了PC 端微信掃碼注冊(cè)和登錄實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Java帶返回值的方法的定義和調(diào)用詳解

    Java帶返回值的方法的定義和調(diào)用詳解

    在java中,方法就是用來(lái)完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過(guò)程中,會(huì)包含很多條語(yǔ)句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來(lái)探究一下帶返回值的方法的定義和調(diào)用
    2022-04-04

最新評(píng)論