国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > java基础 > java线程池异常的处理方法

java线程池异常的处理方法

java线程池异常

头像

小妮浅浅

2021-01-11 13:46:114165浏览 · 0收藏 · 0评论

线程池的任务中,会出现一种特殊的异常。在结果上没有输出,但是程序不会抛出报错,这就需要我们对这种异常进行处理。我们先从通过一个实例来分析这种异常的情况,然后为大家带来处理线程池异常的两种方法及代码实例部分。接下来我们看看线程池发生异常的原理和解决办法吧。

1.异常情况

       ExecutorService threadPool = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 5; i++) {
            threadPool.submit(() -> {
                System.out.println("current thread name" + Thread.currentThread().getName());
                Object object = null;
                System.out.print("result## "+object.toString());
            });
        }

虽然没有结果输出,但是没有抛出异常,所以我们无法感知任务出现了异常。

2.异常处理方法

(1)在run方法上增加异常处理

public class FutureTask<V> implements RunnableFuture<V> {
 
    ...
 
    public void run() {
        if (state != NEW ||
            !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                         null, Thread.currentThread()))
            return;
        try {
            Callable<V> c = callable;
            if (c != null && state == NEW) {
                V result;
                boolean ran;
                try {
                    result = c.call();
                    ran = true;
                } catch (Throwable ex) {
                    result = null;
                    ran = false;
                    setException(ex);
                }
                if (ran)
                    set(result);
            }
        } finally {
            // runner must be non-null until state is settled to
            // prevent concurrent calls to run()
            runner = null;
            // state must be re-read after nulling runner to prevent
            // leaked interrupts
            int s = state;
            if (s >= INTERRUPTING)
                handlePossibleCancellationInterrupt(s);
        }
    }
 
    public V get() throws InterruptedException, ExecutionException {
        int s = state;
        if (s <= COMPLETING)
            s = awaitDone(false, 0L);
        return report(s);
    }
 
    private V report(int s) throws ExecutionException {
        Object x = outcome;
        if (s == NORMAL)
            return (V)x;
        if (s >= CANCELLED)
            throw new CancellationException();
        throw new ExecutionException((Throwable)x);
    }
 
}

(2)使用UncaughtExceptionHandler处理未捕获异常

Thread thread = new Thread(() -> {
System.err.println(3 / 2);
System.err.println(3 / 0);
});
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.err.println(Thread.currentThread().getName() + "==>" + e.getMessage());
}
});
thread.start();

以上就是java线程池异常的处理方法,在理解了发生这种异常的原理后,我们进一步针对这种情况提出两种解决方法,学会后赶紧尝试着去解决吧。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

一品国精和二品国精的文化意义| 《高压监狱2》完整版| 来真正的狗配人真人| 《法国空乘4》在线观看| 一个女的肛门塞了8个小皮球| 真人刺激战场40分钟电视剧| 护士二姐妹精神诊所| 《一滴都不许漏》何泽城林荫| 9.1国产NBA免费看电影| 炮姐BGM高清| 老公不在我和公发| 扒灰小调公媳干仗艳丽是谁唱的| 英语班长乖乖挽起裙子怎么| 电影《爱痴癫》| 爱上兄弟的母亲6集免费观看| 老汉猛躁女人XXXXX88AV| 黑色蕾丝透视露胸旗袍连衣裙| 欧美RAPPER高清头像| 啵啵| 他扒开我小滨添我三男一女视频| 无人区免费观看高清电视剧| 《相濡以沫的夜晚》动漫免费全部| 老师穿白色双开真丝旗袍怎么穿| 麻花传MV在线看免费观看电视剧| 喜爱夜蒲在线观看| 单亲妈妈韩剧在线观看全集| 被扣到眼神失焦| 妻子的秘密韩剧大全免费| 被室友男朋友认错后BY阿司匹林 | 国内夫妇交换自拍视频| 巨茎挺进李淑芬的体内视频| 小婕子太紧了太深了| 扌暴辶鬲的短文| .美国禁忌2在线观看电视剧| 《菊内留香》双男主| 老公弄我一边干一边说粗话视频| 《暴力强伦轩》| 苍井空《办公室爱欲》| 泡妞网站| 人瘦奶大98G奶的注意事项| MIAKHALIFA