我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java如何编写超时工具类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java如何编写超时工具类

这篇文章主要介绍Java如何编写超时工具类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Java的优点是什么

1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。

1、说明

java已经为我们提供了解决办法。jdk1.5带来的并发库Future类可以满足这一需求。Future类中重要的方法有get()和cancel()。get()获取数据对象,如果数据没有加载,则在获取数据之前堵塞,cancel()取消数据加载。另一个get(timeout)操作表明,如果timeout时间内没有得到,就会失败回来,不会堵塞。

利用泛型和函数式接口编写一个工具类,可以让超时处理更方便,而不用到处写代码。

2、实例

@Slf4j@Component@NoArgsConstructorpublic class TimeoutUtil {     private ExecutorService executorService;     public TimeoutUtil(ExecutorService executorService) {        this.executorService = executorService;    }         public <R> Result<R> doWithTimeLimit(Supplier<R> bizSupplier, int timeout) {        return doWithTimeLimit(bizSupplier, null, timeout);    }         public <R> Result<R> doWithTimeLimit(Supplier<R> bizSupplier, R defaultResult, int timeout) {         R result;        String errMsg = "Null value";        FutureTask<R> futureTask = new FutureTask<>(bizSupplier::get);        executorService.execute(futureTask);        try {            result = futureTask.get(timeout, TimeUnit.MILLISECONDS);        } catch (InterruptedException | ExecutionException | TimeoutException e) {            errMsg = String.format("doWithTimeLimit执行超过%d毫秒,强制结束", timeout);            log.error(errMsg, e);            futureTask.cancel(true);            result = defaultResult;        }        return of(result, errMsg);    }         private String randomSpentTime() {        Random random = new Random();        int time = (random.nextInt(10) + 1) * 1000;        log.info("预计randomSpentTime方法执行将耗时: " + time + "毫秒");        try {            Thread.sleep(time);        } catch (Exception e) {        }        return "randomSpentTime --> " + time;    }     public static void main(String[] args) throws Exception {        ExecutorService executorService = new ThreadPoolExecutor(1, 1,                0L, TimeUnit.MILLISECONDS,                new LinkedBlockingQueue<Runnable>(),                runnable -> {                    Thread thread = new Thread(runnable);                    // 以守护线程方式启动                    thread.setDaemon(true);                    return thread;                });        TimeoutUtil timeoutUtil = new TimeoutUtil(executorService);        for (int i = 1; i <= 10; i++) {            log.info("\n=============第{}次超时测试=============", i);            Thread.sleep(6000);            long start = System.currentTimeMillis();            String result = timeoutUtil.doWithTimeLimit(() -> timeoutUtil.randomSpentTime(), 5000).getOrElse("默认");            log.info("doWithTimeLimit方法实际耗时{}毫秒,结果:{}", System.currentTimeMillis() - start, result);        }    } }

以上是“Java如何编写超时工具类”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java如何编写超时工具类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何编写超时工具类

这篇文章主要介绍Java如何编写超时工具类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是
2023-06-14

关于Java日期工具类的编写

这篇文章主要介绍了关于Java日期工具类的编写,在Java开发中,经常会遇到处理日期相关的数据,那么今天我们来自己写一个工具类,文中有详细的实例代码以及实现思路,需要的朋友可以参考下
2023-05-18

基于Java编写简单的Excel工具类

基于Java编写简单Excel工具类简介本文提供了使用Java编写Excel工具类的详细指南。该工具类提供了读取、写入和操作Excel文件的基本功能,使用ApachePOI库实现。它适用于需要与Excel无缝交互的Java应用程序。使用示例展示了如何读取、添加新行和保存Excel文件。优点包括对Excel的全面访问和易用性,而缺点仅限于支持MicrosoftExcel文件格式和可能需要的POI库知识。
基于Java编写简单的Excel工具类
2024-04-02

Java工具类实现高效编写报表

对于报表数据大部分情况下使用写sql的方式为大屏/报表提供数据来源,但是对于某些复杂情况下仅仅使用sql无法实现,这篇文章主要介绍了Java工具类实现高效编写报表
2022-11-21

利用Java怎么实现一个超时工具类

本文章向大家介绍利用Java怎么实现一个超时工具类的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程
2023-06-06

java中DateUtils时间工具类如何实现

这篇文章将为大家详细讲解有关java中DateUtils时间工具类如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下package com.example.administrator.my
2023-05-30

如何在Android中编写一个Intent跳转工具类

这篇文章给大家介绍如何在Android中编写一个Intent跳转工具类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、概述Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的
2023-05-30

java如何编写测试类

在Java中,编写测试类的一种常见方式是使用JUnit框架。下面是一个简单的示例:1. 首先,确保你的项目中已经添加了JUnit库。你可以在项目的构建工具(如Maven或Gradle)中添加JUnit依赖。2. 创建一个新的Java类,该类
2023-08-31

java测试类如何编写

编写Java测试类有以下几个步骤:1. 导入所需的测试框架:通常使用JUnit测试框架来编写Java测试类,需要在测试类的开头导入JUnit相关的类。2. 定义测试类:编写一个公共类,类名以Test结尾,例如,如果要测试一个名为Calcul
2023-08-17

怎么使用Java工具类实现高效编写报表

本篇内容主要讲解“怎么使用Java工具类实现高效编写报表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java工具类实现高效编写报表”吧!为什么使用java代码写报表对于报表数据大部分情
2023-07-04

如何用Python编写nmap扫描工具

这篇文章主要介绍“如何用Python编写nmap扫描工具”,在日常操作中,相信很多人在如何用Python编写nmap扫描工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Python编写nmap扫描工具
2023-06-20

利用Java怎么编写一个DES加密解密工具类

今天就跟大家聊聊有关利用Java怎么编写一个DES加密解密工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。DesUtil.javapackage lsy;import java.
2023-05-31

java中如何编写一个circular类

在Java中,你可以通过创建一个名为Circular的类来表示圆形。以下是一个示例代码:public class Circular {private double radius;public Circular(double radius)
2023-10-26

如何在Java中使用Semaphore工具类

这篇文章将为大家详细讲解有关如何在Java中使用Semaphore工具类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Semaphore的理解Semaphore属于java.util.c
2023-06-15

如何在Java中使用Collections工具类

本篇文章为大家展示了如何在Java中使用Collections工具类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数
2023-06-14

Java并发工具类Future如何使用

这篇文章主要讲解了“Java并发工具类Future如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java并发工具类Future如何使用”吧!前言Future是一个接口类,定义了5个方
2023-06-30

如何在java中使用 Arrays工具类

如何在java中使用 Arrays工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Arrays工具类属于java中常用的工具类public static void so
2023-05-31

如何在Java中使用EasyExcel工具类

今天就跟大家聊聊有关如何在Java中使用EasyExcel工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web M
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录