java线程实现超时
Javathread
用线程实现超时比较简单,大致思想为:定义一个超时守护线程,改线程启动时就sleep规定的超时时间;再执行一个命令或方法时启动该超时线程,如果该命令或方法在制定时间内执行完毕,则关闭守护线程,否则抛出timeout异常。具体代码如下:
定义一个超时守护线程TimeOutThread:
Java代码 收藏代码
package com.pqrs.file.analyse.timeout;
public class TimeOutThread extends Thread {
/**
* 超时时间
*/
private long timeOut;
/**
* 是否取消
*/
private boolean cancel;
/**
* 自定义超时异常
*/
private TimeOutException timeOutException;
public TimeOutThread(long timeOut, TimeOutException timeOutException){
super();
this.timeOut = timeOut;
this.timeOutException = timeOutException;
//设置本线程为守护线程
this.setDaemon(true);
}
public synchronized void cancel() {
cancel = true;
}
public void run(){
try{
Thread.sleep(timeOut);
if(!cancel){
throw timeOutException;
}
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
定义一个自己的超时异常:
Java代码 收藏代码
package com.pqrs.file.analyse.timeout;
public class TimeOutException extends RuntimeException {
/**
* 序列化号
*/
private static final long serialVersionUID = -8078853655388692688L;
public TimeOutException(String errMessage)
{
super(errMessage);
}
}
测试类:
Java代码 收藏代码
public class TestTimeOut {
public static void main(String a[]){
TimeOutThread timeOutThread = new TimeOutThread(3000, new TimeOutException("time out!"));
try{
timeOutThread.start();
Thread.sleep(5000);
timeOutThread.cancel();
} catch(TimeOutException e){
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
java通过线程控制程序执行超时(新) 基本数据类型 反射 线程 超时
讲解有关Java中多线程运行时针对单个线程的执行超时监控机制,用于处理单个线程执行控制
之前在使用Java实现熔断降级组件的时候,需要实现接口请求的超时中断,通过查找相关资料了解了相关的方法,下面这篇文章主要给大家介绍了关于Java中实现线程的超时中断的相关资料,需要的朋友可以参考下
java通过线程控制程序执行超时,多线程,反射
Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便...
定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务
目前普遍采用急救包(Band-Aid)类库的方式解决Java 线程模型存在的同步问题,但类库中的代码很难或无法实 ...通过扩展语法方法解决了同步问题,以确保使用Java线程所开发的 程序的稳定、可靠和可优化。
Java代码,根据URL方式下载单个文件或者图片,根据文件大小进行分批启动多线程下载!
Android开发中经常需要调用线程访问网络,而手机的网络信号经常断断续续,容易出现网络超时的情况,这种情况下后台线程往往得不到关闭,浪费系统资源。 在下面的例子中使用了java 中的Timer类,对线程进行了约束,...
下面小编就为大家带来一篇浅谈java中异步多线程超时导致的服务异常。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Java HttpURLConnection超时和IO异常处理的相关资料,需要的朋友可以参考下
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
程序采用多线程(不超过20个,保证不影响其他程序)和超时设置(默认10秒),自己觉得挺好用的。 包括google网页搜索(GoogleQuery.java) baidu网页搜索(BaiduQuery.java) bing网页搜索(BingQuery.java) 三种...
WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...
下面小编就为大家带来一篇浅谈Java线程间通信之wait/notify。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
尽管可以在等待wait()条件那里放一个超时设置,但等待wait()的设计目的不是这样的,等待wait()在设计上是用于Java线程间的通信。 而使用睡眠sleep()方式,可以让线程从当前开始睡眠指定的时间。注意不要使用睡眠...
百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...