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.使用线程,同样做异常处理。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CMD进入mysql及mysql字符集设置

    CMD进入mysql及mysql字符集设置1.开始-运行-cmd-回车 或者windows+r,进入电脑或者服务器的cmd,2.执行netstartmysql,启动mysql服务(netstopmysql为停止服务),3.1找到自己mysql安装目录的bin目录(我的是C:\ProgramFiles(x86)\MySQL\MySQLServer5.1\bin),操作顺序如下图 3.2在路径栏输入cmd,     …

    2022年5月20日
    38
  • 九度 1480:最大上升子序列和(动态规划思想求最值)

    九度 1480:最大上升子序列和(动态规划思想求最值)

    2021年8月28日
    56
  • Centos搭建Ansible

    Centos搭建Ansible

    2021年6月1日
    79
  • java正则表达式http_Java 正则表达式(精华)

    java正则表达式http_Java 正则表达式(精华)英文:JakobJenkov译文:严亮链接:ifeve.com/java-regex/Java提供了功能强大的正则表达式API,在java.util.regex包下。本教程介绍如何使用正则表达式API。正则表达式一个正则表达式是一个用于文本搜索的文本模式。换句话说,在文本中搜索出现的模式。例如,你可以用正则表达式搜索网页中的邮箱地址或超链接。正则表达式示例下面是一个简单的Java正则表达式的…

    2022年7月7日
    30
  • 移动应用界面设计的尺寸规范「建议收藏」

    移动应用界面设计的尺寸规范「建议收藏」移动应用的界面设计画布尺寸设计多大(特别是Android)、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现?本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索,来分享移动应用界面设计中的尺寸规范等问题,希望能给移动端的新手设计师些许指引。若有不当之处,欢迎斧正。一、android篇1、android分辨率屏幕尺寸指实际的物理尺寸,为

    2022年6月21日
    29
  • Navicat Premium 15激活码(最新序列号破解)

    Navicat Premium 15激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    711

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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