首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java 定时器 Timer 使用.

一、概念       定时计划任务功能在Java主要使用就是Timer对象,它在内部使用多线程方式进行处理,所以它和多线程技术还是有非常大关联。...在JDKTimer类主要负责计划任务功能,也就是在指定时间开始执行某一个任务,但封装任务类却是TimerTask类。      ...类注意事项 1、创建一个 Timer 对象就是新启动了一个线程,但是这个新启动线程,并不是守护线程,它一直在后台运行,通过如下 可以将新启动 Timer 线程设置为守护线程。...7、Timercancel() 和 TimerTaskcancel() 区别?...这是因为Timercancel()方法有时并没有争抢到queue锁,所以TimerTask类任务继续正常执行。 ?

1.1K90

Java线程(五):Timer和TimerTask

Timer是一种线程设施,用于安排以后在后台线程执行任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。...一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。...下面来看一个简单例子:         import java.util.Timer; import java.util.TimerTask; public class TimerTest { static...看一个稍复杂例子,假设有这样一种需求,实现一个连环炸弹,2秒后爆炸一次,3秒后爆炸一次,如此循环下去,这就需要创建两个任务,互相调度,代码如下: import java.util.Date; import...java.util.Timer; import java.util.TimerTask; public class TimerTest { static class MyTimerTask1 extends

61900

go 其实不复杂 timer

在 go 当我们需要延迟一段时间后执行,或者需要间隔固定时间去执行某个行为时候就需要使用到 timer,那么 timer 到底是如何实现呢?我们今天就来看看 timer 里面是什么样。...那么问题来了,时间到了之后什么地方触发往 timer channel 中发数据呢?其实前面的源码已经给出了细节,在 addtimerLocked 方法: if !...所以总的来说在 go1.13 版本timer 实现还是比较简单清晰 go1.17 Timer 那么我们来看看现在版本 timer 是如何实现,因为我们上面详细看过,这里就省略其中部分。...在当前新版本对于 timer 定义有了各种状态表示,下面的注释也很清晰,标识了各种状态所出现情况,至于状态转换这里就不给出具体状态图了。...总的来说 timer 实现还是比较清晰,其实更老版本,一开始 timer 实现堆只有一个,而为了优化全局锁并发性能才出现了 64 个桶这样结构,然后又发现了切换性能问题,继续优化才有了现在

1.5K10

Java Timer定时器原理

做项目很多时候会用到定时任务,比如在深夜,流量较小时候,做一些统计工作。早上定时发送邮件,更新数据库等。这里可以用JavaTimer或线程池实现。Timer可以实现,不过Timer存在一些问题。...下面是一个Timer实现定时任务Demo,会向控制台每隔一秒输出Do work... 1 import java.util.Date; 2 import java.util.Timer; 3 import...Runnable { 虽然代码不多,也不贴完,这里看出,是一个实现了Runable接口类,也就是说可以放到线程运行任务 这里就清楚了,Timer是一个线程,TimerTask是一个Runable...每次取堆nextExecutionTime和当前系统时间进行比较,如果当前时间大于nextExecutionTime则执行,如果是单次任务,会将任务从最小堆,移除。...否则,更新nextExecutionTime值 至此,Timer定时任务原理基本理解,单线程 + 最小堆 + 不断轮询 每天 进步一点点

1.3K20

JDKtimer正确打开与关闭

Timer调度 import java.util.Timer; import java.util.TimerTask; public class TestTimer { public static...ListenerTimer 很多业务需要Timer一直执行,不会执行一次后就关闭,上面的例子timer调用cancel方法后,该timer就被关闭了。...正在执行"); } } 这样当程序启动时候,在监听器初始化timer会梅5秒执行一次 timer 正在执行 timer 正在执行 timer 正在执行 timer 正在执行 此次程序我们没有去调用...线程堆栈跟踪:[ java.lang.Object.wait(Native Method) java.lang.Object.wait(Object.java:502) java.util.TimerThread.mainLoop...(Timer.java:526) java.util.TimerThread.run(Timer.java:505)] 问题原因就是我们没有手动去关闭timer,但是如果去调用cancel方法,真实场景

1.6K20

Java多线程】定时器Timer

标准库Timer 标准库中有一个Timer类,java.util.Timer,核心方法为schedule,schedule有两个参数,第一个参数为即将要执行任务,第二个参数为多久后执行该任务(单位为毫秒...),任务为new TimerTask(),TimerTask为抽象类,实现了Ruannable接口,具体看一下使用 import java.util.Timer; import java.util.TimerTask...,这个线程在执行完一个任务还会等待别的任务执行 模拟实现Timer 通过上述标准库Timer分析Timer内部需要啥东西 描述任务:创建一个类专门表示定时器一个任务 组织任务:使用数据结构来组织...,按照时间顺序先后顺序执行,所以我们需要在安排所有任务找出距离要执行任务时间最短任务,依次类推,不难得出,可以使用优先级队列这一数据结构来组织任务 注意:  此处优先级队列要考虑线程安全问题,...,判断该元素执行时间是不是到了,所以在定时器构造方法创建一个线程来执行任务 public MyTimer(){ Thread t = new Thread(new Runnable

19420

Java 定时器Timer「建议收藏」

大家好,又见面了,我是你们朋友全栈君。 简介 TimerJava提供原生Scheduler(任务调度)工具类,用来在一个后台线程计划执行指定任务。...Timer类提供了以下方法: schedule(TimerTask task, Date time) 安排在 “指定时间” 执行 指定任务(只执行一次) schedule(TimerTask task...task,long delay,long period) 安排指定任务在指定延迟后开始进行重复固定速率执行 Timer.cancal() 终止此计时器,丢弃所有当前已安排任务 Timer.purge...() 从此计时器任务队列移除所有已取消任务 示例:在指定时间执行一次任务 public static void main(String[] args) throws ParseException...(task,date); } 示例 定时器任务 class MyTask extends TimerTask{ private Timer timer; public MyTask(Timer timer

37630

Java 并发专题 : Timer缺陷 用ScheduledExecutorService替代「建议收藏」

比如每隔一段时间清理项目中一些垃圾文件,每个一段时间进行数据清洗;然而Timer是存在一些缺陷,因为Timer在执行定时任务时只会创建一个线程,所以如果存在多个任务,且任务时间过长,超过了两个任务间隔时间...4000 task2实际上是4后才执行,正因为Timer内部是一个线程,而任务1所需时间超过了两个任务间间隔导致。...2、Timer当任务抛出异常时缺陷 如果TimerTask抛出RuntimeException,Timer会停止所有任务运行: package com.zhy.concurrency.timer;...(Timer.java:462) 由于任务1一次,任务2也停止运行了。。。...上述,基本说明了在以后开发尽可能使用ScheduledExecutorService(JDK1.5以后)替代Timer

37320

Utility之Timer属性

Vx6+提供了一个组件INCLUDE_TIMER_SYS_SHOW 有了它,就可以使用vxbSysClkShow()查看系统时钟基本属性,包括最大和最小Rate,以及Frequency 如果镜像包含了辅助时钟...,则可以使用vxbAuxClkShow() 如果镜像包含了时间戳,则可以使用vxbTimestampShow() VxWorks567这个时间戳Frequency为什么这么低呢?...这时候VxWorks默认使用时钟源是HPET - Intel High Precision Event Timer 如果把OS运行模式换成UP,则时间戳默认就会使用TSC - Time Stamp...当然了,Vx5就是这样,因为那会还不支持SMP呢 TSC是奔腾兼容处理器一个计数器,记录处理器消耗时钟周期数,即在CPU每个时钟到来时,该计数器自动加一。...那是不是有些Intel处理器多CPUTSC是同步呢?答案是YES!

55510
领券