国产成人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线程池异常的处理方法,在理解了发生这种异常的原理后,我们进一步针对这种情况提出两种解决方法,学会后赶紧尝试着去解决吧。

关注

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

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

老公让我把B扒开他日| 美女和帅哥一起努力生产豆浆的视频| 《玉浦困之初入桃花之风雨山应》…| 放荡的女兵伦理2| 瑜伽馆里的私密按摩效果怎么样| 共享女儿小诗1~10章的背景资...| 初中小姐姐脚丫踩在男生困困| 法国理伦片《粉嫩小娇乳小说| 《美丽妻子替夫还债》剧情 | 疯狂精力旺盛的女婿小说免费阅读| 女生给男生吃小头头| 妈妈和女婿免费播放电视剧| 小妈爱上继子免费观看电视剧| 免费观看已满十八岁电视剧直播| 出门志穿胸罩乳头凸起怎么办| 完美上司短剧免费完整版| 女性私处蹲下拍照有疙瘩| 国产少女免费观看电视剧| 香车美人| 99久久99久久免费精品 | 《特殊游泳教练》| 《偷尝禁果》韩国三级| 青梅竹马是消防员第一部| 公媳欢情沈曼最新章节更新| 妈妈装睡配合孩子阴阳调和| DO时不堪入耳的话的| 17·C1起草视频| 真人刺激战场40分钟电视剧| 小姨子边喂奶边和我做爰| 摸摸大扔子图片真实| 《酒店激战》动漫1-5集免费观.. 《魅魔之耻》1~4集免费看 | 三人成虎| 芬太尼问题百度百科| 惠灵顿牛排| 父女一起到达巅峰的小说| 《妻欲公与媳》免费看| 日产精品一线二线三线芒果| 三男一女吃奶添下面| 她的紧涩和湿软已经让他忍了太久 | 班长哭了能不能再抠游戏里面的钱| 被男友干了两小时下身都肿起来了