首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java线程定时器Timer

),任务为new TimerTask(),TimerTask为抽象类,实现了Ruannable接口,具体看一下使用 import java.util.Timer; import java.util.TimerTask...,这个线程在执行完一个任务还会等待别的任务执行 模拟实现Timer 通过上述标准库中的Timer分析Timer内部需要啥东西 描述任务:创建一个类专门表示定时器中的一个任务 组织任务:使用数据结构来组织...执行时间到了的任务:创建定时器实例时,创建一个线程专门来执行此任务 描述任务 下面组织任务用到了优先级队列,优先级队列必须插入可以比较大小的元素,所以这里的任务类就必须实现比较器接口Comparable...,判断该元素的执行时间是不是到了,所以在定时器的构造方法中创建一个线程来执行任务 public MyTimer(){ Thread t = new Thread(new Runnable...在任务的执行时间未到之前,可能判断次数很多,比较耗费CPU,而且没有必要一值判断,只需在一定时间内进行判断执行时间到没到即可,所以在还没有到执行时间时,使用wait(时间)来让该线程进行等待,在创建任务时唤醒等待即可

28720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java线程定时器分析

    之前写 Java 定时任务 用到了 ScheduledExecutorService,自己没有思路来实现定时任务的功能,所以十分好奇其底层代码的实现,于是乎就去翻看源码,在这过程中还发现了无处不在的...这里举例 newScheduledThreadPool 来分析,其是指定核心线程数的计划线程池 1.1 基本使用 public class ExecutorSchedule { public static...// 需要计划执行的任务 Runnable runnable = () -> { System.out.println("执行定时任务...ThreadPoolExecutor 方法来构造线程池(阿里规范要手动传参建立线程池) public ScheduledThreadPoolExecutor(int corePoolSize) {...在堆里面可按定延迟时间来排序对比 public interface Delayed extends Comparable { /** * 返回与此对象关联的剩余给定时间单位

    67320

    java创建线程池的几种方式_定时任务 java

    有时候有些需求不需要顺序执行,所以我就使用了多线程并行执行。废话不多说,上代码。...1.创建线程池 package org.java.multithreading; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler...org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor...,并处理请求 // 当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去workQueue中取任务并处理 // 当workQueue放不下任务时,就新建线程入池,...1.corePoolSize 线程池核心线程大小 2.maximumPoolSize 线程池最大线程数量 3.keepAliveTime 空闲线程存活时间 4.unit 空间线程存活时间单位 5.workQueue

    30430

    callable线程使用_java线程结束什么方法

    Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被...ExecutionException e) { e.printStackTrace(); } } } FutureTask实现了两个接口,Runnable和Future,所以它既可以作为Runnable被线程执行...假设有一个很耗时的返回值需要计算,并且这个返回值不是立刻需要的话,那么就可以使用这个组合,另一个线程去计算返回值,而当前线程在使用这个返回值之前可以做其它的操作,等到需要这个返回值时,再通过Future...} } } 代码是不是简化了很多,ExecutorService继承自Executor,它的目的是为我们管理Thread对象,从而简化并发编程,Executor使我们无需显示的去管理线程的生命周期...ExecutionException e) { e.printStackTrace(); } } } } 其实也可以不使用CompletionService,可以先创建一个装Future类型的集合,Executor

    69220

    java线程系列_Thread类创建线程(2)

    Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。...如果不设置线程的名子,线程就使用默认的线程名:Thread-N,N是线程建立的顺序,是一个不重复的正整数。     ThreadGroup group     当前建立的线程所属的线程组。...如x86的页面大小是4KB.在x86平台下,默认的线程栈大小是12KB.     一个普通的Java类只要从Thread类继承,就可以成为一个线程类。...注意:任何一个Java程序都必须有一个主线程。一般这个主线程的名子为main.只有在程序中建立另外的线程,才能算是真正的多线程程序。也就是说,多线程程序必须拥有一个以上的线程。...原文:http://java.chinaitlab.com/line/778510.html

    52130

    死磕 java线程系列之线程池深入解析——定时任务执行流程

    注:java源码分析部分如无特殊说明均基于 java8 版本。 注:本文基于ScheduledThreadPoolExecutor定时线程池类。...来个栗子 创建一个定时线程池,用它来跑四种不同的定时任务。...// 注意,这里没有传入firstTask参数,因为上面先把任务扔到队列中去了 // 另外,没用上maxPoolSize参数,所以最大线程数量在定时线程池中实际是没有用的 if...ensurePrestart(); } } 到这里是不是豁然开朗了,原来定时线程池执行重复任务是在任务执行完毕后,又把任务扔回了任务队列中。...其实,延时队列我们在前面都详细分析过,想看完整源码分析的可以看看之前的《死磕 java集合之DelayQueue源码分析》。

    54220

    线程定时

    System.Threading.Timer是最简单的多线程定时器:它只有一个构造器和两个方法(尤其适合于像作者这样的极简主义者!)。...a pooled thread Console.WriteLine (data); // Writes "tick..." } } 12.5.1节中介绍了如何销毁一个多线程定时器...在创建定时器之后仍然可以调用Change方法修改定时器的定时间隔。如果希望定时器只触发一次,则可以Timeout.Infinite作为构造器的最后一个参数。...static void tmr_Elapsed (object sender, EventArgs e) { Console.WriteLine ("Tick"); } } 多线程定时器会使用线程池来用有限的线程为多个定时器提供服务...因此,不论是回调委托还是事件处理器必须是线程安全的。 多线程定时器精度取决于操作系统,一般情况下精度在10到20毫秒范围内。

    98520

    python 线程定时器Timer

    相对前面几篇python线程内容而言,本片内容相对比较简单,定时器 – 顾名思义,必然用于定时任务。 ? 一.线程定时器Timer原理 原理比较简单,指定时间间隔后启动线程!...=None, kwargs=None) 参数介绍: interval — 定时器间隔,间隔多少秒之后启动定时器任务(单位:秒); function — 线程函数; args — 线程参数,可以传递元组类型数据...,默认为空(缺省参数); kwargs — 线程参数,可以传递字典类型数据,默认为空(缺省参数); 二.线程定时器使用 使用场景:定时闹钟 # !...代码分析: 在主线程创建了线程定时器,在5秒之后执行thread_Timer线程函数,而在thread_Timer函数结束的时候,又设置了定时线程thread_Timer,这就完成了一个递归的操作,间隔...python线程定时器Timer

    1.5K50

    Java实现终止线程池中正在运行的定时任务

    最近项目中遇到了一个新的需求,就是实现一个可以动态添加定时任务的功能。说到这里,有人可能会说简单啊,使用quartz就好了,简单粗暴。然而quartz框架太重了,小项目根本不好操作啊。...线程池是什么 Java通过Executors提供四种线程池,分别为: newCachedThreadPool :创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程...newScheduledThreadPool : 创建一个定长线程池,支持定时及周期性任务执行。...public void run() { System.out.println("this is a thread" + num); } } 踩坑记录 楼主在使用如下代码时,突然想到当这个定时任务需要被停止时该如何停止线程运行...interruptThread,0,2, TimeUnit.SECONDS); 既然我有这样的需求,那就Google一下吧,找了大半圈,愣是没找到相关资料,都是一些关于Java

    5.6K30

    java定时器实例_Java定时器小实例

    有时候,我们需要在Java中定义一个定时器来轮询操作,比如每隔一段时间查询、删除数据库中的某些数据等,下面记录一下一种简单实现方式 1,首先新建一个类,类中编写方法来实现业务操作 public classMailQuartz...org.springframework.scheduling.quartz.SchedulerFactoryBean”> View Code 查看代码,我们可以发现,需要配置我们类MailQuartz、方法Quartz和deleteOldEInvoices的相关信息,然后触发时间的间隔,我们corn...表达式去约束,这样,我们就可以为实现多个方法实现定时器。...3,最后呢,为了优化,由于定时器的触发效果是,项目一启动,定时器就会触发,但是在测试阶段或者你不想让定时器触发,因为他会更改你数据库中的测试数据,那么我们就可以在方法之前读取配置文件中的某个变量值,然后做判断...timer.equals(“1”)){      //然后根据值来阻止定时器的运行 System.out.println(“定时器未开启”); return; } //读取配置文件中的值,开启或者关闭定时

    1.4K30

    Java 定时器_Javaweb定时

    附最终全部代码: 完整的执行过程: 定义 定时器,是多线程编程中的一个重要 / 常用组件 定时器可以强制终止请求:浏览器内部都有一个定时器,发送请求后,定时器就开始计时;若在规定时间内,响应数据没有返回...,只检测队首元素是否到了时间即可 阻塞优先队列: a.支持阻塞队列的特性 b.支持按优先级的”先进先出” c.本质上是一个堆 使用优先队列的目的就是:保证队首元素是就是那个最早执行到的任务 一个线程..., 一直不停的扫描队首元素, 看看是否能执行这个任务 /* * 3.一个线程,循环扫描检测当前阻塞队列中的队首元素,若时间到,就执行指定任务 * */ static class Worker extends...: /* * 定时器 * */ public class ThreadDemo26 { // 1.一个类来描述任务 static class Task implements Comparable<...= new Task(command,after); queue.put(task); synchronized (locker){ locker.notify(); } } } /* * 3.一个线程

    2.4K21

    Java定时任务

    java中一个完整定时任务需要由Timer、TimerTask两个类来配合完成。 API中是这样定义他们的,Timer:一种工具,线程其安排以后在后台线程中执行的任务。...但是由于每一个Timer对象对应的是单个后台线程,用于顺序执行所有的计时器任务,一般情况下我们的线程任务执行所消耗的时间应该非常短,但是由于特殊情况导致某个定时器任务执行的时间太长,那么他就会“独占”计时器的任务执行线程...执行结果为: 指定时间time=Tue Jun 10 11:39:00 CST 2014指定时间执行线程任务… 在延迟指定时间后以指定的间隔时间循环执行定时任务 public class TimerTest03...1、Timer管理时间延迟缺陷 前面Timer在执行定时任务时只会创建一个线程任务,如果存在多个线程,若其中某个线程因为某种原因而导致线程任务执行时间过长,超过了两个任务的间隔时间,会发生一些缺陷: public....java:25) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java

    2K20

    Java并发编程三】多线程案例(手撕单例模式,阻塞队列,定时器,线程池)

    当队列空的时候, 继续出队列也会阻塞, 直到有其他线程往队列中插入元素. Java标准库中内置了阻塞队列,我们可以直接使用标准库中的BlockingQueue。...定时器也是软件开发中的一个重要组件....类似于这样的场景就需要用到定时器。 标准库中的定时器 标准库中提供了一个 Timer 类. Timer 类的核心方法为 schedule 。 schedule 包含两个参数....首先要了解实现一个定时器需要哪些构成: 一个带优先级的阻塞队列 队列中的每个元素是一个 Task 对象....标准库中的线程Java标准库中提供了一个类用来创建线程池,使用 Executors.newFixedThreadPool(10) 能创建出固定包含 10 个线程线程池.

    11410

    Java 定时任务

    JVM 的运行纳秒数,并不受同步影响,适用于计算准确的时间差 但计算当前日期还是要使用 currentTimeMillis 的格林威治时间,而 nanoTime 计算 JVM 运行时间不准确 3. java.util.Timer...private TimerTask[] queue = new TimerTask[128]; } 只有一个单线程执行,所以是串行执行 某个任务执行时间较长会阻塞后面预定执行的任务,所以时间并不准确 线程报错后续的定时任务直接停止...ScheduledExecutorService java.util.concurrent中的工具类,是一个多线程定时器 4.1 使用 public class ExecutorSchedule {...线程池,和上面的 ScheduledExecutorService 是同根同源 6....执行器就是定时任务,而调度中心则负责管理调用这些定时任务,调度中心也可以存储定时任务通过脚本形式(Java 是 Grovvy)免编译地实时下发到各服务中执行。

    2.9K30

    java定时任务

    引言:知易行难 这里我推荐使用第一种,Spring定时任务,简单又简介,高效 一、Spring定时任务 基于springboot创建一个项目,使用定时任务很简单 俩步即可实现 1、启动类上加注解@EnableScheduling...注解开启定时任务 2、方法上加注解@Scheduled设置任务执行时间 示例 默认是单线程定时任务 @Scheduled(fixedDelay =5*1000 ) // 每隔五秒执行一次 单位毫秒...多线程实现,也很简单 1、启动类上开启异步注解 @EnableAsync 2、在定时任务的方法上加注解,设置异步执行 @Async 示例:每三秒执行一次 @Scheduled(cron ="0/3...拓展一下: @Scheduled()的8个参数的意思 1、cron 接受一个cron表达式 2、zone 时区,接受一个java.util.TimeZone#ID 默认是一个空字符串,取服务器所在地的时区...示例3 public static void main(String[] args) { // 线程池执行 // 先创建一个线程池 ScheduledExecutorService

    22630

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券