设置一段代码执行的超时时间的简单方法-程序员宅基地

技术标签: JDK  多线程  thread  

前段时间在搞一个批量处理程序,涉及到多线程操作。但是后台服务很不给力,并发一大常常就挂了,长时间不给返回,导致我的程序也挂死在那里……

那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。

可是在网上搜了大半天,找到的都是无用的代码,根本不能用。

查了大量资料后发现,java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满足这个需求。Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。

到这里,此问题就迎刃而解了。废话不多说,直接上代码:
public class ThreadTest {
   

public static void main(String[] args) throws InterruptedException,
ExecutionException {

final ExecutorService exec = Executors.newFixedThreadPool(1);

Callable<String> call = new Callable<String>() {
public String call() throws Exception {
//开始执行耗时操作
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("处理超时啦....");
ex.printStackTrace();
} catch (Exception e) {
System.out.println("处理失败.");
e.printStackTrace();
}
// 关闭线程池
exec.shutdown();
}
}

注意,以上代码需要 1.5 以上的 jdk 才可编译。
执行后可以发现抛出了 TimeoutException ,打印出了"处理超时啦...." 的文字,在此处可进行超时后的处理。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/helloqiner/article/details/83908707

智能推荐

超级详细的GitBash使用教程01:下载、安装(适合小白)-程序员宅基地

文章浏览阅读3.7w次,点赞58次,收藏322次。GitBash下载、安装、使用教程01一、GitBash下载1、推荐从官网下载:http://www.git-scm.com/download/ (国外网站,虽说不用翻q,但是40多MB的我下载好几次没有下载下来,最新版本2.22.0)2、百度网盘(好男人用的版本:2.9.3):链接:https://pan.baidu.com/s/1M6xMRfj5xUmfYDyXM6Jn4g提取码:vp..._gitbash

C++学习之路(二)C++如何实现一个超简单的学生信息管理系统?C++示例和小项目实例_学生信息管理系统c++代码-程序员宅基地

文章浏览阅读672次,点赞6次,收藏5次。这个示例实现了一个简单的学生信息管理系统。它包括了学生类的定义,可以添加学生信息、显示所有学生信息,将学生信息保存到文件并从文件加载信息。通过这个示例,你可以了解到如何使用类、函数和文件操作来构建一个基本的信息管理系统。一个简单的学生信息管理系统可以由C++的类、函数和文件操作组合实现。在学习过程中,重点理解面向对象编程、文件操作、函数的使用和控制流是关键。同时,要始终注意输入的有效性和错误处理,确保程序的稳健性和可靠性。逐步构建程序并理解每一部分的功能和实现方式,对于初学者来说是非常重要的。_学生信息管理系统c++代码

Error:Cannot determine path to ‘tools.jar‘ library for 16 (C:/Users/PC/.jdks/openjdk-16)解决方案_error:cannot determine path to 'tools.jar' library-程序员宅基地

文章浏览阅读2.3w次,点赞12次,收藏16次。git下来一个新的工程文件,导入intellij之后,找到含main函数的文件运行报错-Error:Cannot determine path to 'tools.jar' library for 16 (C:/Users/PC/.jdks/openjdk-16)点击左上角file-project structure在project将Project SDK等修改为需要的版本,这里我改为1.8..._error:cannot determine path to 'tools.jar' library for 16 (c:/program files/

C/C++头文件中<>与“”的区别详解_c++头文件路径<>和-程序员宅基地

文章浏览阅读2.8k次。在A题的时候,发现某道题可以用到上次的函数,就想起之前看到的如何调用其他文件的函数。在这里把看到的资料整理一下。总的来说,源文件在编译的时候,需要找到头文件,使用在“”包含的头文件中,函数时可以直接不声明的,直接是函数原型在头文件中,或者这些头文件的时候,打开并不能看懂一些标准库函数的原型~~~~(>_此外,调试的时候,如果只在源程序设置断点,头文件中的函数会直接运行;但如果同时也在头_c++头文件路径<>和

汇编语言整数加减法示例_汇编语言加减法程序编写-程序员宅基地

文章浏览阅读3.2k次。在《第一个汇编语言程序》一节中给出的 AddTwo 程序,并添加必要的声明使其成为完全能运行的程序。 ; AddTwo.asm -两个 32 位整数相加 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD .code main PROC mov eax,5 ;将数字..._汇编语言加减法程序编写

CAFFE源码学习笔记之内积层-inner_product_layer_caffe innerproduct-程序员宅基地

文章浏览阅读4.3k次,点赞4次,收藏2次。一、前言 内积层实际就是全连接。经过之前的卷积层、池化层和非线性变换层,样本已经被映射到隐藏层的特征空间之中,而全连接层就是将学习到的特征又映射到样本分类空间。虽然已经出现了全局池化可以替代全连接,但是仍然不能说全连接就不能用了。 二、源码分析 1、成员变量全连接的输入时一个M*K的矩阵,权重是K*N的矩阵,所以输出是一个M*N的矩阵 int M_;//num_input int K_;_caffe innerproduct

随便推点

DuiLib属性_c++ duilib vscrollbar设置-程序员宅基地

文章浏览阅读1.7k次。_c++ duilib vscrollbar设置

python怎么使用预训练的模型_PyTorch使用预训练模型-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏19次。PyTorch模型加载的时候,有预训练模型,通过使用预训练模型可以给模型使用带来很多的便捷,对于模型的使用以下给出了一些总结,如有错误恳请指正。一、直接加载预训练模型进行训练1、加载保存的整个模型torch.save(model,'model.pkl')...model = torch.load('model.pkl')2、加载保存的模型参数torch.save(model.state_dict(..._预训练模型 python

华为云云耀云服务器L实例评测| CloudExplorer Lite轻量级云平台管理华为云云耀云服务器L实例-程序员宅基地

文章浏览阅读538次。华为云云耀云服务器L实例评测| CloudExplorer Lite轻量级云平台管理华为云云耀云服务器L实例_cloudexplorer

React + TSX + Ant Design 实现表格内嵌搜索框_antd tsx-程序员宅基地

文章浏览阅读658次。React + TSX + Ant Design 实现表格内嵌搜索框_antd tsx

Python生成随机字符串SECRET_KEY_生成随机的scret——key-程序员宅基地

文章浏览阅读2.9k次。# -*- coding=utf8 -*-import osimport base64import randomimport timeimport hashlib# 方法一tmp = os.urandom(44)secret_key = base64.b64encode(tmp)print(secret_key)# 方法二def get_random_secret_ke..._生成随机的scret——key

大数据优化方案----HDFS小文件优化方法_dfs针对大数据文件来设计,处理小文件效率低。阅读『file-based data structur-程序员宅基地

文章浏览阅读352次。版权声明:本文为CSDN博主「北京小辉」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/silentwolfyh/article/details/103863621———————————————————————————————————“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅..._dfs针对大数据文件来设计,处理小文件效率低。阅读『file-based data structures』

推荐文章

热门文章

相关标签