java 任务_Java-定时任务
一、 使用 while(true) 和 sleep 实现
newThread(){
@Overridepublic voidrun() {while (true) {
System.out.println("Hello!");try{
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
二、使用 Timer 和 TimerTask 实现
/*** 一个 Timer 对应一个线程,用于执行任务
*@paramname 线程名字
*@paramisDaemon 是否为当前线程的守护线程*/Timer timer= new Timer("haha", false);//一个 TimerTask 对应一个任务
TimerTask task1 = newTimerTask() {
@Overridepublic voidrun() {
System.out.println(Thread.currentThread().getName()+ "Hello! A");
}
};//立即执行,只执行一次
timer.schedule(task1, 0);
timer.schedule(task1,0, 1000);
TimerTask task2= newTimerTask() {
@Overridepublic voidrun() {
System.out.println(Thread.currentThread().getName()+ "Hello! B");
}
};//立即执行,然后每秒执行一次
timer.scheduleAtFixedRate(task2, 0, 1000);
Thread.sleep(5000);//取消任务
task2.cancel();
Thread.sleep(5000);//将所有已经取消的任务移除(释放资源)
timer.purge();//停止 timer 中的所有任务,并终止计时器,无法再提交任务
timer.cancel();
schedule 与 scheduleAtFixedRate 区别
schedule 注重间隔时间,不管任务执行需要多长时间,下一次执行都是在执行完成后的指定间隔时间再执行。
scheduleAtFixedRate 注重执行次数,例如当任务太多或其他原因导致某段时间内执行次数不够(总时间/间隔时间),则会尝试缩短间隔时间,保证总体执行次数。
三、使用 ScheduledThreadPoolExecutor 实现
阿里巴巴 Java 手册中的片段
多线程并行处理定时任务时,Timer 运行多个 TimeTask 时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用 ScheduledExecutorService 则没有这个问题。
线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
说明:Executors 返回的线程池对象的弊端如下:
1)FixedThreadPool 和 SingleThreadPool:
允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。
2)CachedThreadPool 和 ScheduledThreadPool:
允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。
说明了创建线程池的规范,以及使用 Timer 的问题
//Guava 库的工具类,线程工厂,这里主要用来设置线程名字
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
ScheduledThreadPoolExecutor stpe= new ScheduledThreadPoolExecutor(10, namedThreadFactory, newThreadPoolExecutor.AbortPolicy());//一秒后执行
stpe.schedule(() -> { System.out.println(Thread.currentThread().getName() + "\tA"); }, 1, TimeUnit.SECONDS);//立即执行,然后每秒执行一次,注重次数
stpe.scheduleAtFixedRate(() -> { System.out.println(Thread.currentThread().getName() + "\tB"); }, 0, 1, TimeUnit.SECONDS);//立即执行,然后每两秒执行一次,注重间隔时间
stpe.scheduleWithFixedDelay(() -> { System.out.println(Thread.currentThread().getName() + "\tC"); }, 0, 2, TimeUnit.SECONDS);
Thread.sleep(10000);
stpe.purge();//关闭
stpe.shutdown();
java 任务_Java-定时任务相关推荐
- java timertask 定时_Java定时任务--Timer和TimerTask
1.程序和编程 我们知道,计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具. 简单来说程序在本质上是指令的集合,而编程从字面上来讲就是编写这些指令集合(程序) ...
- Java Spring @Scheduled 定时任务crontab表达式设置
Java Spring @Scheduled 定时任务crontab表达式设置 1. Cron详解 2. 例子 参考 1. Cron详解 Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或 ...
- 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇
马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...
- Java如何实现定时任务——从某一天起每天定点执行
Java如何实现定时任务--从某一天起每天定点执行 1.java定时任务可以借助 java.util.Timer 来实现 [java] view plain copy import java.util ...
- java中写定时任务
java中得定时任务,7种使用方式 1.使用普通thread实现 @Testpublic void test1() { // 单位: 毫秒final long timeInterval = 1000; ...
- 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)
黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...
- java一定时间间隔的定时任务_Java 定时任务---Timer
本文来自我一个朋友的个人博客(希望各位以后多多支持):https://www.liupeng.mobi/archives/777 一.Timer类 在java中一个完整的定时任务需要由Timer和Ti ...
- java如何实现定时任务_Java定时任务的三种实现方式
前言 现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了. 很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清 ...
- java 定时_Java线上定时任务不定期挂掉问题分析
作者:IKNOW本尊 问题背景 收到频繁的告警邮件,定时任务调度失败,查看xxl-job的执行器列表是空的,但是服务又显示健康,查看历史任务执行记录发现执行器是依次递减,由于是线上服务,只能先重启,然 ...
- java实现周期任务_java定时任务的实现方式
本文列举常见的java定时任务实现方式,并做一定比较. 1. 循环内部sleep实现周期执行 创建一个thread,run() while循环里sleep()来实现周期性执行; 简单粗暴,作为一个初学 ...
最新文章
- python【Matlibplot绘图库】绘制用于学术论文投稿的黑白图片
- opencv求解AX=0
- TCP-IP详解:快速重传与快速恢复
- RocketMQ源码解析:Producer发送消息+Broker消息存储
- 5G领衔,十余名专家解析当下最火的“新基建”
- Android 调用系统相机拍照,生命周期重走OnCreate,导致无数据的解决办法
- KickStart安装Linux
- 一个由C++程序而引出的问题
- Linux 镜像文件ISO下载
- Mongod 芒果数据库初学.
- SAP介绍:概念、核心、开发语言、优缺点与集成
- 【PCL】PCL点云库介绍及VS环境配置
- 罗伯特索耶的写作六法则
- PHP的一些常用算法
- css去除图片或元素的背景颜色【透明】
- AUTO CAD 偏移命令的使用方法
- Linux内核的配置和编译
- Clojure CLR 入门
- QML控件类型:StackView
- php狼人杀,《狼人杀专业术语》 一秒变成狼圈人!
热门文章
- Xmind快捷键笔记
- python操作sqlite数据库_Python操作Sqlite正确实现方法解析
- 学数学但是不会计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...
- sm2算法c 语言实现,移远通信集成国密安全解决方案的C-V2X AP模组商用落地
- mysql数据迁移到teradata_TERADATA数据库中SELECT的使用
- eclipse linux 代码提示,Linux Eclipse代码提示功能设置(Java C/C++)
- mysql 113_Centos 下 can't connect mysql server 113
- java中介者模式例子_Java中介者模式(Mediator Pattern)
- java helper 设计模式_必知必会的 Java 设计模式入门知识(十):外观模式
- 与ceph的区别_Ceph分布式存储高性能设计