线程(十二)---CompletableFuture(三)

article/2025/10/28 7:23:45

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!   

示例五:异常处理

接着上一篇记录一下CompletableFuture的异常处理,异常处理通常使用exceptionally、whenComplete、handle相关方法,他们之间有一点区别,exceptionally相当于try/catch,whenComplete和handle相当于try/finally。

以下先演示下exceptionally的使用方式,exceptionally 就相当于 catch,出现异常,将会跳过 thenApply 的后续操作,直接捕获异常,进行一场处理,代码如下:

static void exceptionally() throws Exception{CompletableFuture<String> futureA = CompletableFuture.supplyAsync(() -> "执行:" + 10/0).thenApply(s -> {System.out.println("执行了");s += "a";return s;})//.exceptionally(e -> "100").exceptionally(e -> {System.out.println(e.getMessage());return "100";});System.out.println(futureA.get());
}

执行结果如下:

可以看出如果出现异常会直接跳到exceptionally中处理异常,可以获取到异常信息并进行一些补偿操作,前面的操作直接跳过不再执行。

接下来看下whenComplete()对异常的处理,代码如下:

static void whenComplete() throws Exception{CompletableFuture<Integer> futureA = CompletableFuture.supplyAsync(() -> 10/0).thenApply(s -> {System.out.println("执行了");return s + 1;}).whenComplete((r,e) -> {if(r != null && e == null){System.out.println("正常执行");}if(e != null){System.out.println("执行异常:" + e.getMessage());}});System.out.println(futureA.get());
}

执行结果如下:

可以看出,出现异常后,也没执行thenApply中的操作,而是直接跳到whenComplete方法中,但是控制台还报错了,上面说到,whenComplete相当于try/finally操作,没有catch异常肯定会报错,实际用的时候需要结合exceptionally使用,如下追加exceptionally处理:

CompletableFuture<Integer> futureA = CompletableFuture.supplyAsync(() -> 10/0).thenApply(s -> {System.out.println("执行了");return s + 1;}).exceptionally(e -> {System.out.println(e.getMessage());return 100;}).whenCompleteAsync((r,e) -> {if(r != null && e == null){System.out.println("正常执行");}if(e != null){System.out.println("执行异常:" + e.getMessage());}});System.out.println(futureA.get());

执行结果如下:

handle跟whenComplete的区别是handle是有返回值的,使用handle的代码如下:

CompletableFuture<Integer> futureA = CompletableFuture.supplyAsync(() -> 10/0).thenApply(s -> {System.out.println("执行了");return s + 1;}).exceptionally(e -> {System.out.println(e.getMessage());return 100;}).handle((r,e) -> {if(r != null && e == null){System.out.println("正常执行");}if(e != null){System.out.println("执行异常:" + e.getMessage());}return 1;});System.out.println(futureA.get());

执行结果如下:

从结果上看,使用handle与使用whenComplete时,除了handle需要返回结果的不同外,最后打印的结果是也不同,使用handle最终futureA打印的结果是1,也就是说使用的是handle中返回的结果,从try/catch/finally运行的流程来说这种结果也是意料之中。

 

 


http://chatgpt.dhexx.cn/article/rwbiyIQW.shtml

相关文章

dice loss

Dice Loss 最先是在VNet 这篇文章中被提出&#xff0c;后来被广泛的应用在了医学影像分割之中。 Dice 系数 Dice系数作为损失函数的原因和混淆矩阵有着很大的关系&#xff0c;下图给出的是一个混淆矩阵&#xff1a; 其中的一些关键指标如下&#xff1a; 精确率(precision)表…

Hinge loss

声明&#xff1a; 参考自维基百科后面可能会更新 Hinge Loss 在机器学习中&#xff0c;hinge loss作为一个损失函数(loss function)&#xff0c;通常被用于最大间隔算法(maximum-margin)&#xff0c;而最大间隔算法又是SVM(支持向量机support vector machines)用到的重要算法…

【深度学习】一文读懂机器学习常用损失函数(Loss Function)

【深度学习】一文读懂机器学习常用损失函数&#xff08;Loss Function&#xff09; 最近太忙已经好久没有写博客了&#xff0c;今天整理分享一篇关于损失函数的文章吧&#xff0c;以前对损失函数的理解不够深入&#xff0c;没有真正理解每个损失函数的特点以及应用范围&#x…

Pytorch之loss(损失函数)

损失函数也在torch.nn下&#xff0c;具体可以参考文档&#xff0c;也可以参考官网 先根据L1Loss举例 我个人感觉这里的描述还是到官网的文档找比较好&#xff0c;公式看的比文档清楚 import torch from torch import nninputs torch.tensor([[3, 2, 1],[1, 2, 3]], dtypetorch…

机器学习 损失函数 Loss function

损失函数 最小二乘法极大似然估计法交叉熵 【本文根据B站-王木头学科学-视频所学】 在梯度下降中&#xff0c;所求的梯度其实就是损失函数的梯度。 损失函数有三种设计方法&#xff1a; &#xff08;1&#xff09;最小二乘法 &#xff08;2&#xff09;极大似然估计法 &#x…

Focal loss 损失函数详解

Focal loss 目前目标检测的算法大致分为两类&#xff0c;One Stage 、Two Stage。 One Stage&#xff1a;主要指类似YOLO、SGD等这样不需要region proposal,直接回归的检测算法&#xff0c;这类算法检测速度很快&#xff0c;但是精度准确率不如使用Two stage的模型。 two St…

机器学习之常见的损失函数(loss function)

解决一个机器学习问题主要有两部分&#xff1a;数据和算法。而算法又有三个部分组成&#xff1a;假设函数、损失函数、算法优化。我们一般在看算法书或者视频教学时&#xff0c;更多的是去推算或者说参数估计出其假设函数&#xff0c;而往往不太注重损失函数&#xff0c;但是损…

深度学习loss函数理解

机器学习中的范数规则化之L0、L1、L2范数及loss函数 监督机器学习问题无非就是“minimizeyour error while regularizing your parameters”&#xff0c;也就是在规则化参数的同时最小化误差。 最小化误差是为了让我们的模型拟合我们的训练数据&#xff0c;而规则化参数是防止我…

CE Loss,BCE Loss以及Focal Loss的原理理解

一、交叉熵损失函数&#xff08;CE Loss&#xff0c;BCE Loss&#xff09; 最开始理解交叉熵损失函数被自己搞的晕头转向的&#xff0c;最后发现是对随机变量的理解有偏差&#xff0c;不知道有没有读者和我有着一样的困惑&#xff0c;所以在本文开始之前&#xff0c;先介绍一下…

损失函数loss

http://blog.csdn.net/pipisorry/article/details/23538535 监督学习及其目标函数 损失函数&#xff08;loss function&#xff09;是用来估量你模型的预测值f(x)与真实值Y的不一致程度&#xff0c;它是一个非负实值函数&#xff0c;通常使用L(Y, f(x))来表示。 损失函数是经…

机器学习模型中的损失函数loss function

1. 概述 在机器学习算法中&#xff0c;有一个重要的概念就是损失函数&#xff08;Loss Function&#xff09;。损失函数的作用就是度量模型的预测值 f ( x ) f\left ( \mathbf{x} \right ) f(x)与真实值 y \mathbf{y} y之间的差异程度的函数&#xff0c;且是一个非负实值函数。…

损失函数(Loss)

如果我们定义了一个机器学习模型&#xff0c;比如一个三层的神经网络&#xff0c;那么就需要使得这个模型能够尽可能拟合所提供的训练数据。但是我们如何评价模型对于数据的拟合是否足够呢&#xff1f;那就需要使用相应的指标来评价它的拟合程度&#xff0c;所使用到的函数就称…

focal loss详解

文章目录 focal loss的整体理解易分辨样本、难分辨样本的含义focal loss的出现过程focal loss 举例说明focal loss的 α \alpha α变体 focal loss的整体理解 focal loss 是一种处理样本分类不均衡的损失函数&#xff0c;它侧重的点是根据样本分辨的难易程度给样本对应的损失添…

深度学习——损失函数(Regression Loss、Classification Loss)

简介 Loss function 损失函数 用于定义单个训练样本与真实值之间的误差 Cost function 代价函数 用于定义单个批次/整个训练集样本与真实值之间的误差 Objective function 目标函数 泛指任意可以被优化的函数 损失函数用于衡量模型所做出的预测离真实值(GT)之间的偏离程度。 …

深度学习中常见的损失函数(L1Loss、L2loss)

损失函数定义 损失函数&#xff1a;衡量模型输出与真实标签的差异。 L1_loss 平均绝对误差&#xff08;L1 Loss&#xff09;:平均绝对误差&#xff08;Mean Absolute Error,MAE&#xff09;是指模型预测值f(x)和真实值y之间距离的平均值&#xff0c;公式如下&#xff1a; 优…

损失函数(loss function)

文章目录 1、什么是损失函数2、为什么要使用损失函数3、损失函数分类1、分类一2、分类二3、分类三3.1基于距离度量的损失函数3.1.1 均方误差损失函数&#xff08;MSE&#xff09;3.1.2 L2损失函数3.1.3 L1损失函数3.1.4 Smooth L1损失函数3.1.5 huber损失函数 3.2 基于概率分布…

Focal Loss损失函数(超级详细的解读)

什么是损失函数&#xff1f; 1、什么是损失呢&#xff1f; 在机器学习模型中&#xff0c;对于每一个样本的预测值与真实值的差称为损失。 2、什么是损失函数呢&#xff1f; 显而易见&#xff0c;是一个用来计算损失的函数。它是一个非负实值函数,通常使用L(Y, f(x))来表示。 3、…

损失函数loss大总结

分类任务loss: 二分类交叉熵损失sigmoid_cross_entropy&#xff1a; TensorFlow 接口&#xff1a; tf.losses.sigmoid_cross_entropy(multi_class_labels,logits,weights1.0,label_smoothing0,scopeNone,loss_collectiontf.GraphKeys.LOSSES,reductionReduction.SUM_BY_NONZER…

深度学习基础(三)loss函数

loss函数&#xff0c;即损失函数&#xff0c;是决定网络学习质量的关键。若网络结构不变的前提下&#xff0c;损失函数选择不当会导致模型精度差等后果。若有错误&#xff0c;敬请指正&#xff0c;Thank you&#xff01; 目录 一、loss函数定义 二、常见的loss算法种类 1.M…

loss函数 激活函数

一、LOSS函数 loss函数指机器学习模型中用于最小化的目标函数&#xff0c;其一般意义是指判别错误的程度&#xff0c;因为我们要提高准确率&#xff0c;也就是降低错误率&#xff0c;所以可以归结为一个最小化损失函数的问题。 具体的&#xff0c;我们假设有一个十分类问题&a…