Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。
对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。
那么,我们可不可以通过程序设置一定的时间,当程序运行超过该时长后自行终止或者进行其他操作呢?
查了大量资料后发现,Future类就能满足这个需求。
Future类中重要方法包括get()和cancel()。
get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。
另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。
通过这些方法即可实现我们要求。
Java 代码示例:
final ExecutorService exec = Executors.newFixedThreadPool(1);Callable<String> call = new Callable<String>() {public String call() throws Exception {// 放入耗时操作代码块 int cash = 300;String name = "张三";System.out.println(name + "现在有" + cash + "元存款");User u = new User(name, cash);String[] arr = { "线程A", "线程B", "线程C", "线程D", "线程E", "线程F","线程G", "线程H", "线程I", "线程J" };for (int i = 0; i < 10; i++) {MyThread th = new MyThread(arr[i], u,(int) (Math.random() * 1000 - 500));th.start();}//耗时代码块结束Thread.sleep(1000 * 5);return "线程执行完成";}};try {Future<String> future = exec.submit(call);String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); // 任务处理超时时间设为1 秒System.out.println("任务成功返回:" + obj);} catch (TimeoutException ex) {System.out.println("处理超时啦....");System.exit(0);} catch (Exception e) {System.out.println("处理失败.");e.printStackTrace();}exec.shutdown(); // 关闭线程池
将耗时的代码块放入标注的地方后,即可满足要求。
System.out.println("处理失败.");e.printStackTrace();
在该示例程序中,当运行超时后,执行的是退出程序的操作。
也可以根据需要放入其他代码进行相关操作。
例如可以设置当处理超时时就忽略 该错误继续向下执行。
转载于:https://www.cnblogs.com/jiangu66/p/3217696.html
Java学习笔记——Java程序运行超时后退出或进行其他操作的实现相关推荐
- 【java学习笔记day01】运行第一个程序Helloworld!
java学习笔记day01 2.什么是软件工程师? 3.什么是软件? 4.开发软件需要计算机编程语言,计算机编程语言有很多,例如 c, c++,Java,NET,c#,php... 5.Java软件工 ...
- 狂神说Java学习笔记 Java基础
目录 机器语言 第二代语言(汇编语言) 第三代语言 高级语言 Java特性和优势 JDK(Java Development Kit) JRE(Java Runtime Enviroment) JVM( ...
- java学习笔记—java的学习路线
Java体系涉及到三个方面:J2SE,J2EE,J2ME(KJAVA). J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基 ...
- Java学习笔记--Java中必记常见异常
JAVA常见异常 Java.io.NullPointerException null 空的,不存在的 NullPointer 空指针 空指针异常,该异常出现在我们操作某个对象的属性或方法时,如果该对象 ...
- JAVA学习笔记—JAVA SE(四)JAVA核心库类(下)
文章目录 四.JAVA核心库类(下) 1. 异常机制和File类 1.1 异常机制 1.1.1 基本概念 1.1.2 异常的分类 1.1.3 异常的避免 1.1.4 异常的捕获 1.1.5 异常的抛出 ...
- python程序运行键_python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- java学习笔记 java编程思想 第6章 访问权限控制
文章目录 6.1 包:库单元(the library unit) 6.1.1 代码组织 6.1.2 创建独一无二的包名 练习1 练习2 6.1.3 定制工具类 6.1.4 用import改变行为 练习 ...
- JAVA学习笔记——JAVA基础语法(二)
一.面向对象和面向过程的区别 面向过程:它所考虑的是过程和步骤,比如说开车去深圳我们要考虑的是怎么去也就是说:what to do 面向对象:它所考虑的是有几个对象,比如开车去深圳我们要考虑的就是有 ...
- JAVA学习笔记——JAVA基础语法之精华
一.标识符 概念:JAVA里面我们可以给他取名字的(变量.类.方法等等)就是标识符: 注意:1.标识符只能包含字母.数字.下划线还有美元符号$ 2.只能以字母.下划线和美元符号开头 二.变量 概念:J ...
最新文章
- docker搭建 LNMP 环境
- Java中ThreadPoolExecutor的参数理解
- Solidworks如何创建投影曲线
- C语言二维数组元素的多种表示方法小结
- (转).NET框架下使用双缓冲技术绘图
- 软件过程与项目管理第四周作业
- opengl 日地月运动模型_MaskFusion: 多运动目标实时识别、跟踪和重建
- Exchange 常见问题之二----3
- mysql存储过程批量建表
- HDU1878欧拉回路
- 4. Phpstorm svn
- Hadoop组件概览
- python解析pdf乱码,python pdfkit 中文乱码问题的解决方案
- 上海电信光猫超级管理员密码后门
- 朴素贝叶斯,凉鞋问题
- 机器人社社长事迹_社团先进个人事迹材料
- 中国量子计算机应用普及,郭光灿院士专访:量子产业全梳理,15年后量子计算机或可普及...
- 计算集群MOSIX-3.1.1.1.for_kernel-3.2.23 配置
- Bribe the Prisoners(2009 Round 1C C)
- eslint报错Parsing error: Unexpected token prettier/prettier
热门文章
- 如何添加WebService调用时的用户认证
- Main函数参数argc,argv说明
- python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...
- hadoop之BlockPoolManager源码分析
- java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...
- (09)Vivado IO约束
- (09)FPGA设计流程
- FPGA 常用存储器比较
- qt如何把dll封装到exe中_QT在VS2013中的配置
- 数据结构与算法分析(五)——常用排序