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

    Java 定时器 Timer 的使用.

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

    1.2K90

    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

    68800

    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定时器原理

    做项目很多时候会用到定时任务,比如在深夜,流量较小的时候,做一些统计工作。早上定时发送邮件,更新数据库等。这里可以用Java的Timer或线程池实现。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.4K20

    JDK中的timer正确的打开与关闭

    Timer的调度 import java.util.Timer; import java.util.TimerTask; public class TestTimer { public static...Listener中的Timer 很多业务中需要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.8K20

    【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

    30520

    Java 定时器Timer「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 简介 Timer是Java提供的原生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

    44930

    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。

    47920

    android的timertask,Android 中 Timer 和 TimerTask的使用「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 Android中Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中含有一个抽象方法run()。...使用Timer类中的schedule()方法可以完成对TimerTask的调度,该方法具有三个参数,其函数声明如下: public void schedule(TimerTask task, long...多个TimerTask是可以共用一个Timer的,通过调用Timer的schedule方法可以创建一个线程,并且调用一次schedule后TimerTask是无限的循环下去的,使用Timer的cancel...这里为了验证Timer和TimerTask的用法,举了一个案例进行验证,其源代码如下所示: package com.glemontree.timetaskdemo; import java.util.Timer...; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.view.Menu

    85610

    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处理器的多CPU的TSC是同步的呢?答案是YES!

    60010

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券