java实现自动任务_Java实现定时任务的三种方法

普通thread

这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:

public class Task1 {

public static void main(String[] args) {

// run in a second

final long timeInterval = 1000;

Runnable runnable = new Runnable() {

public void run() {

while (true) {

// ------- code for task to run

System.out.println("Hello !!");

// ------- ends here

try {

Thread.sleep(timeInterval);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

Thread thread = new Thread(runnable);

thread.start();

}

}

用Timer和TimerTask

上面的实现是非常快速简便的,但它也缺少一些功能。

用Timer和TimerTask的话与上述方法相比有如下好处:

当启动和去取消任务时可以控制

第一次执行任务时可以指定你想要的delay时间

在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。

Timer实例可以调度多任务,它是线程安全的。

当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务:

import java.util.Timer;

import java.util.TimerTask;

public class Task2 {

public static void main(String[] args) {

TimerTask task = new TimerTask() {

@Override

public void run() {

// task to run goes here

System.out.println("Hello !!!");

}

};

Timer timer = new Timer();

long delay = 0;

long intevalPeriod = 1 * 1000;

// schedules the task to be run in an interval

timer.scheduleAtFixedRate(task, delay,

intevalPeriod);

} // end of main

}

ScheduledExecutorService

ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。

相比于上两个方法,它有以下好处:

相比于Timer的单线程,它是通过线程池的方式来执行任务的

可以很灵活的去设定第一次执行任务delay时间

提供了良好的约定,以便设定执行的时间间隔

我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间:

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

public class Task3 {

public static void main(String[] args) {

Runnable runnable = new Runnable() {

public void run() {

// task to run goes here

System.out.println("Hello !!");

}

};

ScheduledExecutorService service = Executors

.newSingleThreadScheduledExecutor();

service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Sdk 国内镜像下载地址

大连东软信息学院镜像服务器地址:- http://mirrors.neusoft.edu.cn 端口:80北京化工大学镜像服务器地址:- IPv4: http://ubuntu.buct.edu.cn/ 端口:80- IPv4: http://ubuntu.buct.cn/ 端口:80- IPv6: http://ubuntu.buct6.edu.cn/ 端口&#…

java文件替换一行数据_用Golang替换文件中的一行

我是Golang的新手,从一些例子开始 . 目前,我要做的是逐行读取文件,并在满足特定条件时将其替换为另一个字符串 . 该文件用于测试目的包含四行:onetwothreefour处理该文件的代码如下所示:func main() {file, err : os.O…

python核心编程第六章练习6-12

6-12.字符串。(a)创建一个名字为findchr()的函数,函数声明如下。def findchr(string, char)findchr()要在字符串string中查找字符char,找到就返回该值得索引,否则返回-1。不能用string.*find()或者string.*index()函数…

java 迭代器的原理_Java集合框架迭代器Iterator实现原理解析

使用循环遍历集合普通for循环for(int i0;i<10;i){}增强for循环for(String str:list){}什么是迭代器IteratorIterator是Java中的一个接口&#xff0c;核心作用就是用来遍历容器的元素&#xff0c;当容器实现了Iterator接口后&#xff0c;可以通过调用Iterator()方法获取一个I…

当winform窗体的Bordestyle设置为None时,鼠标可以拖动窗体的办法

方法一&#xff1a; 1 2015-07-11 16:05:352 bool formMove false;//窗体是否移动3 Point formPoint;//记录窗体的位置4 private void Form1_MouseDown(object sender, MouseEventArgs e)5 {6 formPoint new Point(); …

传图识字java_Java:全面 清晰的 NIO 学习攻略

Java&#xff1a;全面 & 清晰的 NIO 学习攻略发布时间&#xff1a;2018-11-19 09:19,浏览次数&#xff1a;202, 标签&#xff1a;JavaNIO<>前言* JDK 1.4后&#xff0c;Java提供了一个全新的IO API&#xff0c;即 Java New IO* 本文 全面 & 详细解析Java New IO&…

java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...

说起“飞行模式”很多朋友们都会说我又不坐飞机&#xff0c;要它有啥用&#xff1f;当然有用&#xff01;而且用处可多了不纠结手机辐射问题很多朋友担心晚上不关机手机会有辐射&#xff0c;但是又觉得关机开机很繁琐&#xff0c;真是很纠结。其实只要把手机飞行模式打开就行啦…

Ubuntu下一个openldapserver部署步骤

1&#xff1a;安装zlib 下载zlib-1.2.3.tar.gz&#xff08;或其它版本号&#xff09; wget http://down1.chinaunix.net/distfiles/zlib-1.2.3.tar.gz # ./configure --shared # make # make install 2&#xff1a;安装openssl 不要卸载系统自带的Openssl,否则非常多服务都起不…

dentity在Java里是什么意思_注释@Id和@GeneratedValue(strategy = GenerationType.IDENTITY)的用途是什么?为什么世代类型是身份?...

小编典典让我回答这个问题&#xff1a;首先&#xff0c;使用注释作为我们的configure方法只是一种便捷的方法&#xff0c;而不是应对无休止的XML配置文件。的Id注释是继承自javax.persistence.Id&#xff0c;指示构件字段下面是当前实体的主键。因此&#xff0c;您的Hibernate和…

ACM配置指南

Ubuntu桌面入门指南  ACM比赛系统ubuntu 使用指南 ACM核武器 简明 Vim 练级攻略  Vim命令合集  代码编辑神器VIM&#xff08;附我写acm程序时的配置&#xff09; my_vimrc in ubuntu set cin nu et ts4 sw4 sts4 noswapfile nobackup cursorline set backgrounddark synt…

前端学习(1545):模型和控制器

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <!-- 需要…

java是不是饱和了_广州Java难学吗?Java是不是已经饱和了

无论是在校的学生也好&#xff0c;还是转行的也好&#xff0c;如今学Java开发的人越来越多&#xff0c;造成了如今新手越来越多&#xff0c;有人说前端饱和了&#xff0c;Java饱和了&#xff0c;Java才刚开始以一种好的势头发展就饱和了&#xff1f;怎么可能&#xff0c;一般说…

Hello Indigo

Windows Communication Foundation (WCF),formerly code-named “Indigo,” is Microsoft’s platform for Service-Oriented Architecture (SOA),designed for building distributed service-oriented applications for the enterprise and the web. WCF was released with Wi…

java apk安装路径_android apk安装过程源码解析

前言&#xff1a;前一篇博客分析了一下PackageManagerService是如何解析apk的以及我们如何解析未安装apk中的androidManifest.xml文件。解析完肯定要安装的&#xff0c;索性写一篇关于android系统是如何安装我们apk的流程分析。不过这里仅仅只分析java层面的代码&#xff0c;C层…