java如何捕获InterruptedException错误
发表于:2025-02-13 作者:千家信息网编辑
千家信息网最后更新 2025年02月13日,小编给大家分享一下java如何捕获InterruptedException错误,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧
千家信息网最后更新 2025年02月13日java如何捕获InterruptedException错误
小编给大家分享一下java如何捕获InterruptedException错误,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
捕获InterruptedException错误
请检查下面的代码片段:
public class Task implements Runnable { private final BlockingQueue queue = ...; @Override public void run() { while (!Thread.currentThread().isInterrupted()) { String result = getOrDefault(() -> queue.poll(1L, TimeUnit.MINUTES), "default"); //do smth with the result } } T getOrDefault(Callable supplier, T defaultValue) { try { return supplier.call(); } catch (Exception e) { logger.error("Got exception while retrieving value.", e); return defaultValue; } }}
代码的问题是,在等待队列中的新元素时,是不可能终止线程的,因为中断的标志永远不会被恢复:
1.运行代码的线程被中断。
2.BlockingQueue # poll()方法抛出InterruptedException异常,并清除了中断的标志。
3.while中的循环条件 (!Thread.currentThread().isInterrupted())的判断是true,因为标记已被清除。
为了防止这种行为,当一个方法被显式抛出(通过声明抛出InterruptedException)或隐式抛出(通过声明/抛出一个原始异常)时,总是捕获InterruptedException异常,并恢复中断的标志。
T getOrDefault(Callable supplier, T defaultValue) { try { return supplier.call(); } catch (InterruptedException e) { logger.error("Got interrupted while retrieving value.", e); Thread.currentThread().interrupt(); return defaultValue; } catch (Exception e) { logger.error("Got exception while retrieving value.", e); return defaultValue; }}
以上是"java如何捕获InterruptedException错误"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
错误
代码
标志
篇文章
内容
方法
线程
原始
不怎么
元素
大部分
更多
条件
标记
片段
知识
行业
行为
资讯
资讯频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
创建数据库语句
地质材料数据库
小米下载的原神能改服务器吗
怎么将图片存入mysql数据库
am服务器管理模式在哪
oracle加入数据库
长宁区项目数据库服务商服务费
lol打造服务器
c语言软件开发游戏过程
sql数据库大字段类型
松江区诚信软件开发市场
无锡农商银行软件开发
服务器异常 请联系管理员
软件开发部应有哪些制度
mysql数据库代码格式
数据库数据使用逗号分割
ktv网络技术员靠谱吗
目前网络安全域划分有哪些基本方
政府信息网络安全
开封市裕鸿软件开发有限公司
戴尔320服务器好不好
上海艺造网络技术有限公司
牢牢把控网络安全
国产三维设计软件开发
ogg连不上数据库
服务器启动一直显示红叉
哪些场景涉及网络安全
考研复试数据库技术
数据库简称是DB
手游摩尔庄园怎么换服务器