博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK1.6在SUSE11下问题跳变定时任务失效问题记录
阅读量:2439 次
发布时间:2019-05-10

本文共 477 字,大约阅读时间需要 1 分钟。

问题现象:使用ScheduleExecutorService部署定时任务,在时间向过去跳变比如当前11点跳变为10点后,定时任务突然失效,然后再次到11点时所有积压的定时任务(10-11点)一起执行,可能导致业务压力过大
问题原因:POSIX提供的标准计时器API进行封装,主要提供了两种类型的时钟的封装:CLOCK_REALTIME和CLOCK_MONOTONIC,第一种绝对时间,第二种是相对时间,JDK1.6中使用的是第一种,jdk内部的修复方式是改为第二种(见bug最下面评论)
为什么会存在定时任务积压呢?内部实现原理应该和Timer类实现比较类似,即内部有一个队列,以11点跳变到10点为例,假设有个10分钟执行一次的定时任务,本来马上要执行11:10分的定时任务,但是跳变了,然后10:10分的任务进入队列,然后每次队首时间和当前时间比较,如果<=当前时间,则出队列,所以再次到11点10分的时候,之前的任务都出队列然后依次执行了.

问题解决:升级业务JDK1.6为JDK1.8

此外,比较神奇的是在SUSE10的业务主机上并没有这个问题;

转载地址:http://glcqb.baihongyu.com/

你可能感兴趣的文章
css float属性_CSS float属性和清除
查看>>
字符串tostring_字符串toString()方法
查看>>
字符串方法中会修改原字符串_字符串padStart()方法
查看>>
字符串中include_字符串include()方法
查看>>
字符串endsWith()方法
查看>>
number.isnan_Number isNaN()方法
查看>>
虚拟dom_虚拟DOM
查看>>
安卓录制视频不录制外界声音_我如何录制我的视频
查看>>
如何在纯JavaScript中等待DOM ready事件
查看>>
react测试组件_测试React组件
查看>>
vue组件引入scss变量_如何将SCSS与Vue.js单个文件组件一起使用
查看>>
node.js删除文件_如何使用Node.js删除文件
查看>>
怎么过去web项目路径_我过去所做的所有软件项目
查看>>
开发人员,学习营销
查看>>
node 导出csv文件_如何使用Node.js编写CSV文件
查看>>
JavaScript数组简介
查看>>
创建react应用程序_如何调试React应用程序
查看>>
javascript国际化_JavaScript国际化
查看>>
JavaScript公共类字段
查看>>
object create_Object create()方法
查看>>