Java程序运行超时后退出或进行其他操作的实现

简介:
当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了。
  对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出。
  那么,我们可不可以通过程序设置一定的时间,当程序运行超过该时长后自行终止或者进行其他操作呢?
  查了大量资料后发现,Future类就能满足这个需求。
  Future类中重要方法包括get()和cancel()。
  get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。
  另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。
  通过这些方法即可实现我们要求。
  Java 代码示例:
final ExecutorService exec = Executors.newFixedThreadPool(1);
Callable call = new Callable() {
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 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();
System.out.println("处理失败.");
e.printStackTrace();
  在该示例程序中,当运行超时后,执行的是退出程序的操作。
  也可以根据需要放入其他代码进行相关操作。
  例如可以设置当处理超时时就忽略 该错误继续向下执行   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
目录
打赏
0
0
0
0
209
分享
相关文章
JVM实战—1.Java代码的运行原理
本文介绍了Java代码的运行机制、JVM类加载机制、JVM内存区域及其作用、垃圾回收机制,并汇总了一些常见问题。
JVM实战—1.Java代码的运行原理
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
课时5:第一个Java程序
课时5介绍了编写第一个Java程序的步骤,包括创建Hello.java文件、编写“Hello World”代码、编译和运行程序。主要内容有:1) 新建并编辑Hello.java;2) 编译Java源文件生成.class文件;3) 通过命令行解释执行Java程序;4) 解释主方法的作用及信息输出操作。本课强调了类定义、文件命名规则和基本程序结构的重要性,并建议初学者使用记事本编写代码以熟悉基础语法。
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。
消防救援支队消防员单兵装备智能养护舱点击驱动java版程序(一)
智能消防作战服架通过电机驱动系统提升消防员作业效率和安全性。本文介绍基于Java的电机驱动程序开发,涵盖硬件准备、软件环境搭建及驱动程序实现。重点包括串口通信配置、电机控制类设计与控制逻辑实现,确保电机高效稳定运行。通过正确配置通信协议和串口参数,并添加异常处理机制,保障系统的安全性和可靠性。
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
95 2
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
221 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等