JAVA并发编程中断
所谓的中断操作:它并不会真正地中断一个正在运行的线程,而只是发出中断请求,然后由线程在下一个合适的时刻中断自己。
调用一次interrupt中断请求,再次调用就是把中断状态恢复
1、响应中断
处理中断异常:
1》传递异常
2》恢复中断状态
这里有一个示例,用来限时运行任务,在规定的时间内,不论程序是否响应中断终止程序,还是没有响应到中断,我们都可以获取到通过调用这个方法获取结果,
也就是可以再规定的时间内获取到处理结果,对结果如何处理,那就可以自己定义
package cn.study.concurrency; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * * @author xiaof * */ public class TimeCount { private static final ScheduledExecutorService cancelExec = Executors.newSingleThreadScheduledExecutor(); /** * * @param r 线程 * @param timeout 任务超时限定 * @param unit 时间单元 * @throws Throwable */ public static void timedRun(final Runnable r, long timeout, TimeUnit unit) throws Throwable { class RethrowableTask implements Runnable { //抛出的异常 private volatile Throwable t; @Override public void run() { try { r.run(); } catch (Throwable e) { this.t = e; } } /** * 当运行超时,或者程序运行正常退出的时候,后面进行控制的时候调用这个返回给调用者 * @throws Throwable */ void rethrow() throws Throwable { //这个t可以自己包装,或者返回其他数据,这个可以根据不同的业务来定 //这里甚至可以保持当前状态到本地,在下次运行的时候,先读取本地数据,恢复到当前状态,留到以后操作 if(t != null) throw t; } } RethrowableTask task = new RethrowableTask(); final Thread taskThread = new Thread(task); taskThread.start(); //启动外部线程 cancelExec.schedule(new Runnable() { public void run() { //启动中断异常 taskThread.interrupt(); } }, timeout, unit); //等待线程的终止,用来应对即使任务不响应中断,限定时间一到,最后仍可以抛出异常到这个方法的调用者 taskThread.join(unit.toMillis(timeout)); //抛出异常 task.rethrow(); } }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java是热门编程语言,适合初学者和经验丰富的开发者学习。本教程从基础概念出发,逐步深入讲解高级主题。安装Java开发工具包后,可通过创建简单的“Hello,World!”程序实践编程。理解代码后,使用命令提示符编译并运行程序,控制台上将输出“Hello,World!”。学习Java开启了编程之旅,随着掌握程度加深,可创建更复杂的应用程序。
