TimeTrack_cycletime和takttime的区别

TimeTrack_cycletime和takttime的区别使用TimerTask可以方便的实现定时任务的功能,但是如果使用不当,反而会带来隐患。在使用TimerTask时,TimerTask中的代码必须要做异常处理,否则产生异常的时候,就挂掉了。特别像使用MQ发送数据的时候,不会显式的要求你捕获异常,如果你忘记了,那么在某个时刻MQ异常的时候(比如网络异常),在发送数据到MQ失败的时候,TimerTask就挂掉了。比如如下代码:Appli…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

使用TimerTask可以方便的实现定时任务的功能,但是如果使用不当,反而会带来隐患。

在使用TimerTask时,TimerTask中的代码必须要做异常处理,否则产生异常的时候,就挂掉了。
特别像使用MQ发送数据的时候,不会显式的要求你捕获异常,如果你忘记了,那么在某个时刻MQ异常的时候(比如网络异常),在发送数据到MQ失败的时候,TimerTask就挂掉了。

比如如下代码:

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext_*.xml");
final JmsSender jmsSender = ac.getBean(JmsSender.class);
Timer timer = new Timer();
// 1.TimerTask中不处理异常
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("开始发送数据");
        jmsSender.sendTopicMsg("test.topic","hello,world");
        System.out.println("数据发送成功");
    }
},10000,5000);

Jetbrains全家桶1年46,售后保障稳定

这段代码没有做异常处理,我们看下执行结果:

TimeTrack_cycletime和takttime的区别
最开始启动程序时,让MQ正常启动起来,这个时候TimerTask是正常工作的;在某个时刻关闭MQ,这个时候发现TimerTask中已经没有打印任何东西了,包括后面MQ恢复了也没有再打印,说明TimerTask已经挂掉了。
所以在使用TimerTask的时候要尤其注意这点,搞不好就踩着坑了。

处理方法有这么几种:
1.仍然使用TimerTask,但做异常处理;
2.使用单一线程的线程池来做;
3.使用线程,同样做异常处理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234642.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java rpc接口_java调用python模型

    java rpc接口_java调用python模型依赖<!–XMRPC相关依赖–><dependency><groupId>org.apache.xmlrpc</groupId><artifactId>xmlrpc-server</artifactId><version>3.1.3</version></dependency>

    2022年10月12日
  • C语言学习——结构体数据类型

    C语言学习——结构体数据类型本章节比较简单不做过多说明,直接上案例,如有疑问,欢迎留言。结构体作为函数参数#include <stdio.h>#include <string.h>struct Books{ char name[50]; char author[50]; int book_id;};// 函数声明void printBook(struct Books *b…

  • oracle如何修改用户密码_oracle重置用户名密码

    oracle如何修改用户密码_oracle重置用户名密码轻松搞定Oracle用户密码修改 摘要:服务器更换、数据库移植都会涉及到Oracle用户密码的修改操作,这里给出几段简单的代码,帮您轻松搞定Oracle用户密码的修改操作。 我们假设这样一个应用场景,数据库需要移植,库中某一个用户的Oracle用户密码不知道,可是这个密码因为在其他程序中使用了而不能修改,在新的数据库系统中,这

  • js layui 弹出子窗体_Layui弹出层 加载 做编辑页面的方法[通俗易懂]

    js layui 弹出子窗体_Layui弹出层 加载 做编辑页面的方法[通俗易懂]layui是一款优秀的模块化前端框架。利用layui弹出层做编辑页面先上效果图基本准备,引入layui的layui.css,layui.js文件Js方法/***页面内弹出编辑窗口//需要引入layui.jslayui.css文件*@param{}title标题不显示为false*@param{}area大小[“400px”,”500px”]或者”400px”—&…

  • C语言-判断回文字符串(二)

    C语言-判断回文字符串(二)7-2 判断回文字符串 (15分)输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。输入格式:输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。输出格式:输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No。输入样例1:level输出样例1:levelYe…

  • opennebula kvm 创建VM oned报错日志

    opennebula kvm 创建VM oned报错日志

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号