poj java 输入超时_Java:如何实现代码超时功能?
我们写一个有超时功能的 Callable:
import java.util.concurrent.*;
public class TimeoutCallable implements Callable {
private final Callable callable;
private final V timeoutV;
private final long timeout;
/**
* 构造一个 TimeoutCallable
*
* @param callable 要运行的 Callable
* @param timeout Callable 的最大运行时间
* @param timeoutV Callable 超时的返回结果
*/
public TimeoutCallable(Callable callable, long timeout, V timeoutV) {
this.timeout = timeout;
this.callable = callable;
this.timeoutV = timeoutV;
}
@Override
public V call() throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future future = executor.submit(callable);
V v = null;
try {
v = future.get(timeout, TimeUnit.MILLISECONDS);
} catch (TimeoutException ex) {
System.out.println("Callble 超时");
}
executor.shutdownNow(); // 给线程池中所有正在运行的线程发送 中断 信号
return v != null ? v : timeoutV;
}
}
然后试验:
import java.util.concurrent.*;
public class Test {
public static void main(String[] args) throws Exception {
Callable callable = () -> {
int N = 4;
int sum = 0;
for (int i = 0; i < N; i++) {
// Thread.sleep 方法是可以响应中断的,
// 如果你的代码需要“超时则线程结束”的效果,那么你的代码也应该要能够响应中断
Thread.sleep(1000);
sum += i;
}
return sum;
};
// 代码2, 代码2 运行的最长时间为 timeout
int timeout = 3000;
Integer timeoutValue = -1;
TimeoutCallable timeoutCallable = new TimeoutCallable<>(callable, timeout, timeoutValue);
ExecutorService executor = Executors.newSingleThreadExecutor();
Future future = executor.submit(timeoutCallable);
Integer result = future.get();
executor.shutdown();
// end 代码2
// 代码3
if (timeoutValue.equals(result)) {
System.out.println("--任务超时--");
} else {
System.out.println("任务结果:" + result);
}
// end 代码3
}
}
callable 的运行时间为 4 s,但我们设置的超时时间为 3 s,所以代码运行结果就是:
(可以看到 NetBeans 给出的运行时间是 3 s)
如果我们将 timeout 改成 5000(5 s),则结果是:
(可以看到 NetBeans 给出的运行时间是 4 s)
poj java 输入超时_Java:如何实现代码超时功能?相关推荐
- java 输入控制_java控制台输入
一.java控制台输入 java控制台输入有如下几个方法 1.JDK 1.4 及以下版本读取的方法 JDK 1.4 及以下的版本中要想从控制台中输入数据只有一种办法,即使用System.in获得系统的 ...
- java 输入出生年月_java代码实现输入你出生年月日,计算到今天已经度过了多少天...
输入出生年月日,计算到今天为止已经经过了多少天 import java.text.ParseException; import java.text.SimpleDateFormat; import j ...
- java 抓屏_java抓屏代码
一个网上找下来的 抓屏代码只需呀输入要存放的路径和名字 就可以执行,但不能为空. import java.awt.Dimension; import java.awt.Rectangle; impor ...
- java输入输出流_Java学习之输入输出流
"持志如心痛,一心在痛上,岂有功夫说闲话,管闲事 --摘自阳明先生语录" Java中通过流来完成输入/输出,所有的输入/输出以流的形式处理,流可以理解为一个数据的序列.输入流表示从 ...
- java 连接kafka超时_java – Kafka KStreams – 处理超时
我试图使用< KStream> .process()与Time Windows.of("name",30000)批量处理一些KTable值并发送它们.似乎30秒超过了消 ...
- java基础格式_Java基础之代码的基本格式
每一种编程语言都有一套自己的语法规范,java也是如此,同样需要遵从一定的语法规范,如代码的书写.标识符的定义.关键字的应用等.因此要学好Java就要先熟悉它的基本语法.很多人都在发知识点和课程大纲, ...
- java 输入人名_Java 读取控制台输入
Java 提供了我们两种读取控制台输入的方法: 一.传统方法 public class ReadConsoleOld { public static void main(String[] args) ...
- java synchronized块_Java多线程同步代码块Synchronized
Java多线程同步代码块Synchronized Java中的每个对象都有一个与之关联的内部锁(Intrinsic lock). 这种锁也称为监视器(Monitor), 这种内部锁是一种排他锁,可以保 ...
- java 输入地址_Java输入邮件地址
import java.util.Scanner; public class Exercise01 { public static void main(String[] args) { System. ...
最新文章
- 以前不知道的,现在知道了(微机原理)
- javascript构造可以上传文件的form表单(通过js修改enctype)
- Word文档转html并提取标题
- 【干货】产品经理常忽略的用户研究的四大误区
- 10个凭证类型的速记
- 【机器学习】分类算法-sklearn转换器和估计器
- PAT (Basic Level) 1073 多选题常见计分法(恶心模拟)
- java反射模式_Java反射机制详解
- 【Codeforces Round #452 (Div. 2) C】 Dividing the numbers
- 1-3docker commit定制镜像
- Android studio的布局总结
- vue修改config后怎么生效_梦幻西游 金银锦盒修改后资金怎么攥 可以考虑跑商
- 大文件上传 之 改版了的SlickUpload.HttpUploadModule(Krystalware.SlickUpload.dll)
- 在win7物理机,使用vmware,3台centos7系统,分别部署httpd,php-fpm,mariadb
- 【教你Win7下如何激活快速启动栏】
- 数据结构 严蔚敏 迷宫求解 代码
- 一转眼,波士顿动力 Atlas 机器人又会过独木桥了!
- 积木Sketch插件进阶开发指南
- 一个故事带你看透HTTPS(上)
- android实现仿真键盘(KeyboardView适配)
热门文章
- 分区字段不在SQL过滤中,悲剧
- python3.3使用tkinter实现猜数字游戏代码
- 网站目录爆破的扫描器的思路
- ffmpeg文档3:播放声音
- AngularJS学习之旅—AngularJS 模块(十五)
- ArcGIS中,一个点集里的点两两连线,比如有4个点,就连6条线
- 学号 2016-2017-20155329《Java程序设计》课程总结
- Ext中Grid重新load设置URL
- Windows Server 2012 +WDK7600.16385.1+VS2008驱动开发环境搭建
- K8S_Google工作笔记0013---通过二进制方式_部署node节点_安装docker