Java方法设置超时
来源:互联网 发布:淘宝商品美化 编辑:程序博客网 时间:2024/05/19 22:45
我们在开发过程中可能会遇到这样的场景:在执行一个耗时操作的时候,如果在规定的时间内处理完成了,则返回正确的结果,否则视为超时任务,这个时候我们将不再等待(不再执行)该耗时操作,直接告诉调用者:这个任务由于耗时过多,被取消了。
import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.FutureTask;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;public class TimeoutTest { private static ExecutorService executorService = Executors.newSingleThreadExecutor(); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub long start = System.currentTimeMillis(); String result = timeoutMethod(5000); System.out.println("方法实际耗时:" + (System.currentTimeMillis() - start) + "毫秒"); System.out.println("结果:" + result); try { Thread.sleep(8000); long start1 = System.currentTimeMillis(); String result1 = timeoutMethod(5000); System.out.println("方法实际耗时:" + (System.currentTimeMillis() - start1) + "毫秒"); System.out.println("结果:" + result1); } catch (Exception e) { // TODO: handle exception } } /** * 有超时时间的方法 * @param timeout * @return */ private static String timeoutMethod(int timeout) { String result = "默认"; FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() { @Override public String call() throws Exception { return unknowMethod(); } }); executorService.execute(futureTask); try { result = futureTask.get(timeout, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { //e.printStackTrace(); futureTask.cancel(true); result = "默认"; } return result; } /** * 这个方法的耗时不确定 * @return */ private static String unknowMethod() { Random random = new Random(); int time = (random.nextInt(10) + 1) * 1000; System.out.println("任务将耗时: " + time + "毫秒"); try { Thread.sleep(time); } catch (Exception e) { // TODO: handle exception } return "获得方法执行后的返回值"; }}
参考:http://blog.csdn.net/a1015088819/article/details/53099943
阅读全文
0 0
- Java方法设置超时
- java 接口方法超时异常处理 设置超时时间
- python 设置方法超时
- java 判断方法调用是否超时 设置方法调用的超时时间
- Java Session超时设置
- Java Session超时设置
- java 设置WebService超时
- Java Session超时设置
- java 设置超时
- Java Session超时设置
- Java Session超时设置
- java 方法的执行时间监控 设置超时(Future 接口)
- java判断方法超时
- session超时时间设置方法
- session超时时间设置方法
- session超时时间设置方法
- session超时时间设置方法
- connect设置超时的方法
- android文件打印的两种方法(外部app-printerShare-打印和蓝牙打印)
- ConcurrentHashMap原理分析
- 沉浸式状态栏
- Spring MVC统一异常处理
- Argparse简易教程
- Java方法设置超时
- 【spark】编程代码,随笔记录
- JESD204B概述
- Android之极光推送发送自定义消息
- 漫谈递归:递归的思想
- pat L3-008 DFS深度优先搜索
- 提高代码阅读能力的7种方法
- 猫狗队列问题
- Jetpack 安装