Java:当被另一个线程中断时,如何捕获线程上的 InterruptedException?

2024-01-17

我正在开发一个多线程应用程序来建立与外部服务器的连接 - 每个服务器都在单独的线程上 - 并且将被阻止,直到有输入。其中每一个都扩展了 Thread 类。为了便于解释,我们将这些称为“连接线程”。

所有这些连接线程都存储在并发哈希图中。

然后,我允许 RESTful Web 服务方法调用来取消任何线程。 (我使用的是 Grizzly/Jersey,因此每个调用都是一个独立的线程。)

我检索特定的连接线程(从哈希映射)并对其调用 Interrupt() 方法。

那么,问题来了,在连接线程中,如何捕获 InterruptedException? (当连接线程被外部 RESTful 命令停止时,我想执行一些操作。)


所以,这是一个问题,在连接线程中,我如何捕获 中断异常?

你不能。因为如果您的线程在读 I/O 操作上被阻塞,则它不能interrupted。这是因为interrupt只是设置一个标志来指示线程已被中断。但如果您的线程因 I/O 而被阻塞,它将看不到该标志。
正确的方法是关闭底层套接字(线程被阻止),然后捕获异常并将其向上传播。
所以既然你的连接线程extend Thread请执行下列操作:

@Override  
public void interrupt(){  
   try{  
      socket.close();  
   }  
   finally{  
     super.interrupt();  
   }  
}   

这样就可以中断 I/O 上阻塞的线程。

然后在你的run方法做:

@Override  
public void run(){  

    while(!Thread.currentThread().isInterrupted()){    
       //Do your work

    }  
}    

所以在你的情况下不要尝试catch an InterruptedException。您无法中断 I/O 上阻塞的线程。只需检查您的线程是否已被中断,并通过关闭流来促进中断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:当被另一个线程中断时,如何捕获线程上的 InterruptedException? 的相关文章

  • 使用 Java-Large 文件查询 JSON 文件

    我正在尝试使用 java 解析下面的 JSON 文件 我需要能够 按 ID 或名称或对象中的任何字段搜索文件 也在字段中搜索空值 搜索应返回整个对象 该文件将会很大 并且搜索应该仍然很省时 id 1 name Mark Robb last
  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • IntelliJ 建议错误的 @NotNull 注释

    IntelliJ 建议导入com sun istack internal NotNull以下程序中的 NotNull 注释 这是错误的 public class Test implements Comparable
  • 从另一个类添加 Swing 组件

    我正在学习java 我正在尝试从另一个类向我的框架添加一个菜单栏 练习将代码划分为多个类以更好地组织程序 这是我的代码示例 public class MainApp public static void main String args C
  • Android 防火墙与 VpnService

    我正在尝试使用 BS 项目的 VpnService 为 Android 实现一个简单的防火墙 我选择 VpnService 因为它将在非 root 设备上运行 它将记录连接并让您过滤连接 基于IP 有一个应用程序可以做到这一点 因此这是可能
  • 当用户使用相同的凭据登录两次时如何使用户会话无效

    我正在使用带有 Richfaces 和 Facelets 的 JSF 1 2 我有一个应用程序 其中包含许多会话范围的 Bean 和一些应用程序 Bean 假设用户使用 Firefox 登录 创建一个会话 ID A 然后他打开 Chrome
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • Android 上的自定义视图和窗口属性

    我想要做的是在我的应用程序顶部添加一个视图 该视图类似于过滤器视图 我想操纵屏幕的颜色 并且我还希望能够同时更改屏幕的亮度时间 这两件事似乎是分开起作用的 但不能一起起作用 这是我的代码 添加视图 colourView new Layer
  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • 更改 Spring Web 应用程序的默认会话超时

    我必须测试一个由 spring 和 jsp 编写的 Web 应用程序 应用程序的默认会话超时为 30 分钟 我想减少会话超时 为此 我改变了web xml文件输入tomcatInstallationLocation conf 但这不起作用
  • 基于Java模式分割字符串

    您好 我有以下模式的日志文件 2014 03 06 03 21 45 432 ERROR mfs pool 3 thread 19 dispatcher StatusNotification Error processing notific
  • 为什么 Cassandra 客户端在生产中没有 epoll 时会失败? [复制]

    这个问题在这里已经有答案了 当我在本地运行服务时 我收到一条警告 指出 epoll 不可用 因此它使用 NIO 很公平 当我将其部署到 Kubernetes 中时 我得到了以下信息 这导致服务无法运行 2017 03 29T19 09 22
  • 如何使 RSACryptoServiceProvider 在没有填充(nopadding)的情况下工作?

    我需要使 C 应用程序与 Java 应用程序兼容 Java 应用程序使用Cipher getInstance RSA ECB nopadding 初始化器使密码 ECB 和无填充 但是 在 C 中 您有 2 个填充选项 OAEP 填充或 P
  • JSF“总”变量类似于 JSTL 中的 c:set

    我不喜欢 JSF 但我需要用它来解决这个问题 我正在 纯 JSF 中工作 所以这就是我基本上需要的 但我不知道如何用 JSF 来实现它
  • 解析 SWIG 接口文件的结构属性

    这是我不久前问过的问题的延续 为通过参数返回的函数创建类型映射 https stackoverflow com questions 12793973 create a typemap for a function that returns
  • SecurityContextHolder.getContext().getAuthentication() 返回 null

    我想使用以下代码手动绕过 spring Security 的用户 User localeUser new User UsernamePasswordAuthenticationToken auth new UsernamePasswordA
  • 使用 WaitHandle.WaitAll 时是否可以对 ThreadPool 中的任务进行分组/隔离?

    我面临的情况如下 因为 ThreadPool 每个进程有 1 个实例 所以我的问题是方法 1 会在 3 秒后取消按方法 2 排队的任务 http请求进来 method 1 gets executed first ThreadPool Que
  • selenium 没有找到合适的方法,直到(ExpectedCondition)

    这是有线的问题 我导入的项目运行 100 几个月前 今天我已将其与依赖项一起导入 但存在问题WebDriverWait 这是我的代码 WebDriverWait driverWait new WebDriverWait driver 100
  • 是什么让热部署成为“难题”?

    在工作中 我们经常遇到这样的问题 永久代内存不足 http www jroller com agileanswers entry preventing java s java lang例外 团队负责人认为这是 JVM 中的一个错误 与代码的

随机推荐

  • 如何计算直线和曲线的最近点? ..还是曲线和曲线?

    给定直线和二次贝塞尔曲线的点 如何计算它们的最近点 INRIA 有一篇关于这个问题的科学论文 计算两条贝塞尔曲线之间的最小距离 http hal inria fr inria 00518351 en PDF here http hal in
  • 是什么导致桌面屏蔽图标覆盖在*某些*桌面上

    我有一个 C Builder Delphi 应用程序 它具有作为资源嵌入的以下清单
  • 检测django模型中的HOST域名

    在我的模型中 我想使用我在视图中使用的域名 HOST 由于 请求 对象 在视图中这是可行的 但我该怎么办 这个模型方法 哪些不使用 HttpRequest 对象 现在我在 settings py 中设置一个全局值 HOST 并使用它 但那就
  • 使用 lkJSON 解析 JSON

    我有一个 JSON 文件 需要解析并提取一个值 user pk 25025320 username instagram full name Instagram is private false profile pic url https i
  • 实现时在 typescript 中找不到 OnInit

    我正在使用 loginComponent 开发一个示例项目 当我尝试添加 OnInit 时 我需要在我的类中实现 OnInit 但出现以下错误 ts 找不到 OnInit 这是我的代码 export class loginComponent
  • JSON.Stringify 将引号添加到 ID [重复]

    这个问题已经存在了 我正在使用 JSON stringify 和 JSON parse 根据对在线数据库的更改来编辑我的 JSON 文件 一切正常 除了在数字周围加上引号 这会搞乱 JSON 文件 例如应该是 id 1但它正在打印出来 id
  • java SwingWorker.doInBackground() 不得访问 GUI 元素

    也许这很微不足道 我正在努力理解一个简单的文档摇摆工人 http docs oracle com javase 6 docs api javax swing SwingWorker html 这是复制粘贴的内容 Workflow Swing
  • 在 IValueConverter 类中定义属性

    我需要在转换器类中定义 DependencyProperty 因为我需要此数据来进行转换 并且此数据位于另一个对象中 而不是我绑定到的对象中 我的转换器类如下 public class LEGOMaterialConverter Depen
  • 如何在tomcat访问日志中记录Client IP和X-Forwarded-For IP

    如何在 tomcat 访问日志中记录 Client IP 和 X Forwarded For IP 我正在使用 X Forwarded For i 如果我通过负载均衡器访问 它会记录实际的客户端地址 但如果我直接访问 tomcat 实例 则
  • 从 glmmTMB 类的 ZINB 模型生成预测计数分布

    在上一个问题中 R 中没有从 Zeroinfl 对象预测零 https stackoverflow com questions 22314921 no zeros predicted from zeroinfl object in r 有一
  • 这个“>>=”运算符在 C 中意味着什么?

    unsigned long set set is after modified set gt gt 1 我在内核系统调用中发现了这个 但我不明白 它是如何工作的 表达方式set gt gt 1 means set set gt gt 1 即
  • using 语句 - 它会触发垃圾收集吗?

    我想做的是包装一些可能在 using 语句中泄漏的可疑函数来触发垃圾收集 有人使用或见过这样的东西吗 这有效吗 您对此有何看法 using String wrapper new String maybe this will trigger
  • AGP 7.0.0-alpha15之后如何更改版本代码

    在 AGP 7 0 0 alpha15 之前 我可以更改应用程序的版本代码 例如这样 android defaultConfig applicationVariants all if buildType name debug outputs
  • Three.js 加载已三角化的网格是否比使用四边形的网格性能更高?

    我读过 Three js 对所有网格面进行三角剖分 这是正确的吗 然后我意识到我使用的大多数 gltf 模型都有四面体 在 Blender 中对面进行三角测量非常容易 所以我很好奇对面进行预先三角测量是否会导致网格加载更快 提前致谢 如果您
  • 如何使用 R 运行 ldap 查询?

    我想对 LDAP 目录进行查询 了解员工在部门和组中的分布情况 就像是 给我一个小组所有成员的部门名称 然后使用 R 进行频率分析 但我找不到任何有关如何使用 R 连接和运行 LDAP 查询的示例 RCurl 似乎有某种支持 http cr
  • JSF:将 A.jsf 设置为键入 mydomain.com 时要转到的默认页面

    现在 每次我打字mydomain com它会自动转到mydomain com projectname home jsf 这是我的登录页面 不知道为什么 我知道我仍在会话中 这意味着我可以导航到受限页面而无需再次登录 那么如果我输入的话我该怎
  • 尝试上传到 s3 时出现 InvalidAccessKeyId

    我正在使用aws sdk将文件上传到 s3 我正在配置我的凭据 aws config update accessKeyId aws config credentials accessKeyId secretAccessKey aws con
  • 如何在 C 中定义和使用位数组?

    我想创建一个非常大的数组 在上面写入 0 和 1 我正在尝试模拟一种称为随机顺序吸附的物理过程 其中长度为 2 的二聚体单位沉积在 n 维晶格的随机位置上 且彼此不重叠 当晶格上没有足够的空间来沉积更多二聚体时 晶格被堵塞 该过程就会停止
  • Rake 任务之间如何通信?

    假设我有一个目标需要编译一些文件 该目标有另一个目标作为先决条件 即获取文件的目标 这么说吧 task obtain do obtain files from somewhere end task compile gt obtain do
  • Java:当被另一个线程中断时,如何捕获线程上的 InterruptedException?

    我正在开发一个多线程应用程序来建立与外部服务器的连接 每个服务器都在单独的线程上 并且将被阻止 直到有输入 其中每一个都扩展了 Thread 类 为了便于解释 我们将这些称为 连接线程 所有这些连接线程都存储在并发哈希图中 然后 我允许 R