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

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 { /** * 返回与此对象关联的剩余给定时间单位

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

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(时间)来让该线程进行等待,在创建任务时唤醒等待即可

23120

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

28930

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

66820

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

50530

线程定时

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毫秒范围内。

91020

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

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

45020

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.5K30

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定时任务

引言:知易行难 这里我推荐使用第一种,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

21230

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 定时

Java 定时器 1. 概述 Timer 可以按计划执行重复的任务或者定时执行指定任务,这是因为 Timer 内部利用了一个后台线程 TimerThread 有计划地执行指定任务。...Timer:是一个实用工具类,该类用来调度一个线程(schedule a thread) ,使它可以在将来某一时刻执行。Java 的 Timer 类可以调度一个任务运行一次或定期循环运行。...一个 Timer 对象对应的是单个后台线程,其内部维护了一个 TaskQueue,用于顺序执行定时器任务 TimeTask。 即:Timer 是定时器,TimerTask 是定时器任务。...(当应用程序想要快速地终止一个定时器执行线程,它应该调用 Timer 的 cancel() 方法。 int purge():从该定时器队列中移除所有取消的定时任务并且返回被移除任务的数目。...方法 boolean cancel():取消这个定时任务 long scheduleExecutionTime():返回此定时任务最近实际被调度执行的时间(当定时任务正在执行此方法被调用了,返回值就是运行中定时任务的调度执行时间

1.3K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券