线程中断
//中断主线程
Thread.currentThread().interrupt();//线程自己中断自己
Thread worker = new Thread();
worker.start();
worker.interrupt();//线程A中断线程B
Thread.interrupted();//检测中断状态,并清除中断状态,中断标记置为false
worker.isInterrupted();//检测中断状态,不会改变中断状态
package org.thread; public class InterruptDemo1 { public static void main(String[] args) { //中断主线程 Thread.currentThread().interrupt(); Worker worker = new Worker(); Thread t = new Thread(worker); t.start(); System.out.println("Main Thread.isInterrupted: "+Thread.currentThread().isInterrupted()); try { Thread.sleep(100);//由于主线程处于中断状态,调用sleep()将会抛出InterruptedException } catch (InterruptedException e) { /** * 在catch块中捕获到被抛出的Interrupted异常时,被中断线程的中断状态已经被清空(中断状态=false),以便确保该线程处于正常状态继续执行 * 因为中断仅仅是立即停止线程当前正在做的事,在catch到中断之后,可以让该线程去做另一件事情,所以进入catch块时中断状态实际上已经置为false了! * 至于如何处理中断异常,需要根据具体情况而定: * 1. return 退出循环/方法 * 2. 抛出InterruptedException到上层 * 3. 返回到线程池中,继续准备为下一个请求进行服务 */ System.out.println("The interrupted status of the current thread is cleared when this exception is thrown."); System.out.println("Main Thread.isInterrupted: "+Thread.currentThread().isInterrupted());//false //Clear Interrupted status, just make sure. Don't confused! Thread.interrupted(); System.out.println("Main Thread.isInterrupted: "+Thread.currentThread().isInterrupted());//false } t.interrupt(); } private static class Worker implements Runnable { @Override public void run() { //doWork01(); doWork02(); } /** * 此循环不会因为别的线程调用了本线程的interrupt()而停止 * 因为,既没有中断异常的捕获,也没有中断状态的检测,所以,程序不会对中断做出任何响应 */ private void doWork01() { while(true) System.out.println("Interrupte Has No Effect To Me!"); } /** * 在循环中主动检测中断状态,当发现自己被中断时,退出 */ private void doWork02() { while(true) { System.out.println("Because there is no interruptedException can be thrown, so we need to check 'interrupt status' ourselves!"); if(Thread.currentThread().isInterrupted()) {//or Thread.interrupted() System.out.println("We have been interrupted, so just stop the work and return to home!"); return; } } } } }
超时后中断线程:
package org.thread; /** * 监视线程,超时便中断 */ public class InterruptDemo2 { public static void main(String[] args) throws InterruptedException { Worker worker = new Worker(); Thread t = worker.work(); int patience = 5000;//5s long start = System.currentTimeMillis(); while(t.isAlive()) { printMessage("Still waiting..."); t.join(1000);//主线程等待1s后再执行 if(System.currentTimeMillis()-start > patience && t.isAlive()) { printMessage("Tired of waiting!!!"); t.interrupt(); t.join();//主线程无限等待,直到t线程结束后,主线程才继续往下执行 } } System.out.println("Over!"); } private static void printMessage(String message) { String tName = Thread.currentThread().getName(); System.out.format("%s: %s%n", tName, message); } private static class Worker implements Runnable { final String[] messages = {"AAAAA","BBBBB","CCCCC","DDDD"}; @Override public void run() { for(int index=0; index<messages.length; index++) { try { Thread.sleep(2000); printMessage(messages[index]); } catch (InterruptedException e) { printMessage("Not finished"); return; } } } public Thread work() { Thread t = new Thread(this); t.start(); return t; } } }
相关推荐
.net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...
.net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...
定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务
Android开发中经常需要调用线程访问网络,而手机的网络信号经常断断续续,容易出现网络超时的情况,这种情况下后台线程往往得不到关闭,浪费系统资源。 在下面的例子中使用了java 中的Timer类,对线程进行了约束,...
易语言远程线程注入类模块源码,远程线程注入类模块,设置超时时间,私_创建远程线程,打开进程号,取内部句柄,取进程ID,关闭打开句柄,远程申请内存,远程申请内存_文本,远程释放内存,远程执行代码,生成调用代码_数组,执行...
多线程应该采用消息中心来交换数据,这样就规避了线程同步交互,等待,阻塞等等,全部是异步调用,全部是接收消息工作,然后产生消息,线程间没有耦合,消息中心有很多成熟的方案如RabbitMQ, Redis(里面有简单的...
一个轻量级的springboot项目性能分析工具,通过方法调用链路追踪以及运行时长监控快速定位性能瓶颈,并进行可视化展示,还支持代码热更新与邮件预警 实时监听方法,统计运行时长 web展示方法调用链路,瓶颈可视化...
1.设置 alarm 信号,超时时间到了触发 alarm 信号,通过 alarm 信号来杀脚本 2.fork 子进程,然后通过 execl 系统调用执行脚本,f
1.资源简介:PyQt5中使用多线程模块QThread解决了PyQt5界面程序执行比较耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题,采用线程池ThreadPoolExecutor解决了ping多个IP多任务耗时问题。...
在MFC 子线程中使用UI(控件)退出时死锁或者超时处理参考
2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要):如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露. 剩下两
3.2等待态的中断/超时等待态的中断 4、线程的终止 线程的启动和终止 不熟悉线程基本概念的同学,可以先看看我的上一篇文章拜托,学习并发编程之前请学习下线程! 1、线程的构造 在运行线程之前首先要构造一个线程...
koTime是一个轻量级的springboot项目性能分析工具,通过方法调用链路追踪以及运行时长监控快速定位性能瓶颈,并进行可视化展示,还支持代码热更新与邮件预警; 实时监听方法,统计运行时长; web展示方法调用链路,...
跨公网调用第三方,可能存在的问题: • 公网抖动,第三方服务不稳定,影响自身服务 • 一个接口超时,占住工作线程,影响其他接口 降低影响的优化方案: • 增大工作线程数 • 降低超时时间 • 服务垂直拆分 ...
分别用单进程和多进程的模式实现python调用arcgis模块,上传的代码执行的功能包括:单进程使用map映射机制执行、多进程池方式执行、读写arcgis的ascii栅格数据文件、窗口分析提取栅格快的边缘栅格以及调用若干arcgis...
根据AsyncEnumerator的原理改写,提供了线程函数的流程控制,线程管理,监视函数调用超时的功能。 适用于需要开启多个线程,要去线程能够长时间稳定执行某一操作的场景 不足之处欢迎留言
主要介绍了Java HttpURLConnection超时和IO异常处理的相关资料,需要的朋友可以参考下
特征可以是'百度一下')验证超时 : 验证代理超时 默认=12 (秒)尝试验证次数 : 尝试验证次数 默认=1 (次)代理生命值 : 提取的代理能被获取几次 默认=1 (次) (比如采集东西的时候就可以设置10-50次)代理最长存活...
(2)、处理线程:处理线程调用回调函数将信息传递给应用层或协议栈,可设定参数决定工作处理数量; (3)、看守线程:响应Accept事件调用AcceptEx,检测连接和心跳超时 ,将信息投递给工作线程,模块仅有一个看守线程...
这是您传递超时,要调用的函数以及所有参数的函数,并且它最多运行#timeout#秒,并且将返回/引发传递的函数否则将返回或引发的所有内容。 def func_timeout(timeout, func, args=(), kwargs=None): ''' func...