项目中遇到线程池异步处理Callable请求,阻塞接收future.get()结果时,对线程中断状态位state的处理问题。try {

Future future = executor.submit(callcable);

future.get();

} catch (InterruptedException e) {

Thread.interrupted(); // 重置当前线程的中断位state为true,便于该线程以后被其他任务正常调用

}

对项目中的这种处理感到疑惑,翻了下源码中具体的实现细节,发现Future的实现类FutureTask的get()方法如下:

public V get() throws InterruptedException, ExecutionException { int s = state; if (s <= COMPLETING) s = awaitDone(false, 0L); // throws InterruptedException

return report(s); // throws ExecutionException

}其中InterruptedException是awaitDone(false, 0L)方法抛出的:

if (Thread.interrupted()) { removeWaiter(q); throw new InterruptedException();}可以看出awaitDone(boolean timed, long nanos)方法中已经重置了状态位state,所以正常项目中捕获InterruptedException异常后,不需要再重新重置当前线程的状态位state。不过为了安全保险起见,Thread.interrupted()重置一下会更加便于项目中的理解;同时Process的实现类ProcessImpl的waitFor()抛出的InterruptedException异常处理亦是如此。

来源:https://www.cnblogs.com/septemberFrost/p/12015029.html

java futuretask get reject异常_FutureTask的get()方法之异常处理相关推荐

  1. 已解决java.util.concurrent.ExecutionException异常的正确解决方法,亲测有效!!!

    已解决java.util.concurrent.ExecutionException异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 粉丝群里面的一个小伙伴敲代码时发生 ...

  2. 实现波动数组Java_教你用java实现时序数据异常检测(1)LOF-ICAD方法

    数据的异常检测是一个难题, 面临许多挑战, 其中包括: 定义一个正常表现的范围是比较困难的, 异常值和正常值有时候边界并不是特别明显 某些恶意行为会伪装成正常值, 难以发现 大多数领域的正常行为只能在 ...

  3. java dwr 漏洞_DWR异常情况处理常见方法解析

    在本次项目中,由于时间紧张直接使用DWR做Ajax请求!要求的是动态展示,那就需要使用DWR轮询请求,但是需要做异常情况下的一些处理! 特别是DWR在遇到异常后,后台不报错,前台也只提示一个 Erro ...

  4. java中常见的异常类

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  5. Java 中常见的异常和自定义异常

    常见异常: java.lang.nullpointerexception    这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者 ...

  6. nslang oracle_解决ojdbc14连接oracle报“java.sql.SQLException: Io 异常: Size Data Unit (SDU) mismatch”异常问题...

    一.前言 通过ojdbc14.jar连接oracle数据库,应用运行期间报出"java.sql.SQLException: Io 异常: Size Data Unit (SDU) misma ...

  7. java futuretask 源码解析_Java异步编程——深入源码分析FutureTask

    Java的异步编程是一项非常常用的多线程技术. 之前通过源码详细分析了ThreadPoolExecutor<你真的懂ThreadPoolExecutor线程池技术吗?看了源码你会有全新的认识&g ...

  8. Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)

    原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...

  9. 知识点: Java FutureTask 使用详解

    FutureTask 使用详解 概述 类图 创建第一个任务 取消任务 检索结果值 总结 概述 FutureTask 可取消的异步任务,提供Future的基础实现,并实现了Runnable接口.Futu ...

最新文章

  1. Android自定义ListView的Item无法响应OnItemClick的解决办法
  2. PHP 表单验证--安全性--小记
  3. Struts 体系结构与工作原理(图) .
  4. 业务库负载翻了百倍,我做了什么来拯救MySQL架构
  5. javascript 动态修改css样式
  6. PARALLEL(并行)
  7. 人工智能里一种实现机器学习的技术
  8. POJ 2115 模线性方程 ax=b(mod n)
  9. ESP32烧录bin,乐鑫下载工具使用flash_download_tool
  10. L3HCTF bypass出题人视角
  11. Markdown常用数学符号
  12. JSP中通过checkbook实现批量管理
  13. PHP按符号截取字符串的指定部分
  14. 全国计算机四六级报名时间,2018年6月四六级考试报名即将截止,请抓紧时间报名!...
  15. 用Unison实现数据的双向实时同步
  16. 解决windows2003 sp1“数据执行保护”惹的祸
  17. 用前端代码智能识别身份证的头像
  18. python中import string是什么意思_python string是什么
  19. 算法-数塔问题-c语言
  20. 货币增发为什么会造成通货膨胀? 如何造成

热门文章

  1. 【BZOJ3110】【codevs1616】K大数查询,权值线段树套普通线段树
  2. 20.校准相机——SVD技巧第1部分,SVD技巧第2部分,SVD技巧第3部分_2
  3. bzoj1037 [ZJOI2008]生日聚会Party 插数dp
  4. 【Level 09】U1 The way I see it L2 Keep everyone safe
  5. Android中XML数据解析
  6. echarts 3d地图_独占进博会800m2展厅!3D炫酷光影秀带你邂逅金山往事..._政务_澎湃新闻...
  7. Windows中导出电脑文件名或者文件结构的方法
  8. 排序(2):直接插入排序
  9. day46-CSS3新增功能
  10. Hadoop_10_HDFS 的 DataNode工作机制