[Java]如何安排任务间隔运行

应用程序中经常需要在后台运行某些特定任务以在一定间隔内完成某些工作。 该示例可以是,服务在后台运行以清理应用程序,就像我们有Java Garbage集合一样。

在本文中,我将向您展示3种不同的方法来实现这一目标

他们如下

  • 使用简单的线程
  • 使用TimerTask
  • 使用ScheduledExecutorService

使用简单的线程

这非常简单,它创建了一个简单的线程,使用while循环使其永远运行,并利用sleep方法放置两次运行之间的间隔。

这是实现它的快捷方法

以下是此代码。

public class Task1 {public static void main(String[] args) {// run in a secondfinal long timeInterval = 1000;Runnable runnable = new Runnable() {public void run() {while (true) {// ------- code for task to runSystem.out.println("Hello !!");// ------- ends heretry {Thread.sleep(timeInterval);} catch (InterruptedException e) {e.printStackTrace();}}}};Thread thread = new Thread(runnable);thread.start();}
}

使用Timer和TimerTask

我们看到的先前方法是最快的方法,但是缺少一些功能

与以前相比,这具有更多的好处,如下所示

  • 控制何时启动和取消任务
  • 如果需要,可以延迟首次执行,这很有用

在这种情况下,我们使用Timer类进行调度,并使用TimerTask封装要在其run()方法中执行的任务。

计时器实例可以共享以计划多个任务,并且它是线程安全的。

调用Timer构造函数时,它将创建一个线程,并且该单个线程可用于任何任务调度。

出于我们的目的,我们使用Timer#scheduleAtFixedRate

以下代码显示了Timer和TimerTask的用法

import java.util.Timer;
import java.util.TimerTask;public class Task2 {public static void main(String[] args) {TimerTask task = new TimerTask() {@Overridepublic void run() {// task to run goes hereSystem.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
}

这些类是JDK 1.3中存在的类。

使用ScheduledExecutorService

这是Java SE 5中的java.util.concurrent作为并发实用程序引入的。 这是实现目标的首选方式。

与以前的解决方案相比,它具有以下优点

  • 与TImer的单线程相比,线程池用于执行
  • 提供延迟第一次执行的灵活性
  • 提供良好的约定以提供时间间隔

以下代码显示了相同的用法,

在这里,我们使用ScheduledExecutorService#scheduleAtFixedRate ,如图所示,它将param作为可运行的,我们要运行哪段代码,首次执行的初始延迟

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 hereSystem.out.println("Hello !!");}};ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);}
}

翻译自: https://www.javacodegeeks.com/2014/04/java-how-to-schedule-a-task-to-run-in-an-interval.html

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

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

相关文章

Sky Line 与 ArcEngine的粘合剂 Composite UI AB?

如今的goverment领导们觉得地图都太抽象,只有google Earth式的应用能引起他们的兴趣,作为为公仆服务的我们自然要学习掌握3D GIS技术来提高zf的执政能力了,于是Sky Line来了,拿到开发手册的时候觉得接口不多应该很容易开发&#x…

php if终止,php判断用户是否掉线及关闭网页的方法分享

要实现判断用户已掉线并关闭网页,主要用到方法connection_status 和 connection_aborted。通过一个例子,来了解下它们的用法:echo str_repeat(" ",300);//以下不可省略,否则用户断线,php(线程)立即终止,不会…

默认方法一种扩展旧代码的方法

如您所知,Java的新版本于2014年3月18日发布,我将介绍一系列文章来演示其新功能,也许在某些方面,我将谈论我的想法和批评。 我认为重要的第一个功能是“默认方法”,在所有Java语言的先前版本中,接口只能包含…

vue 如何点击按钮返回上一页

1&#xff0c;vue 如何点击按钮返回上一页呢&#xff1f; 这是vue挂载的范围html代码 <div click"goOff()">返回</div> 下面是点击返回的方法 第一种只返回上一页 goOff(){ this.$router.go(-1); }, 第二种 返回上一页&#x…

2007白领职场成功需要哪“十商”

1.德商(MQ)&#xff1a;指一个人的道德人格品质。德商的内容包括体贴、尊重、容忍、宽容、诚实、负责、平和、忠心、礼貌、幽默等各种美德。 2.智商(IQ)&#xff1a;是一种表示人智力高低的数量指标。也可以表现为一个人对知识的掌握程度&#xff0c;反映人的观察力、记忆力、思…

Remove Element - LeetCode

目录 题目链接注意点解法小结题目链接 Remove Element - LeetCode 注意点 输入的数组是无序的解法 解法一&#xff1a;使用了erase函数&#xff0c;将等于val的值移除。时间复杂度为O(n) class Solution { public:int removeElement(vector<int>& nums, int val) {fo…

DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)...

url控制第二种写法&#xff08;只要继承了ViewSetMixin&#xff09; url(r^pub/$,views.Pub.as_view({get:list,post:create})), #获取所有记得路由后面加$结束符 #pub/?formatjsonurl(r^pub\.(?P<format>\w)$,views.Pub.as_view({get:list,post:create})), #pu…

要配置php环境_只需修改,要配置Apache的PHP环境,只需修改()。

案例分析一&#xff1a;假定CPU的主频是500MHz。硬盘采用DMA方式进行数据传送&#xff0c;其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过。如果CPU在DMA初始化设置和启动硬盘操作等方面用了1000个时钟周期&#xff0c;并且在DMA传送完成后的中断…

使用Java 8和Lambda简化ReadWriteLock

考虑到旧版Java代码&#xff0c;无论您在哪里看&#xff0c;带有lambda表达式的Java 8绝对可以提高质量和可读性。 今天&#xff0c;让我们看一下ReadWriteLock以及如何使它使用起来更简单。 假设我们有一个称为Buffer的类&#xff0c;该类可以记住队列中的最后几条消息&#x…

[导入]C#好书盘点【月儿原创】

C#好书盘点【月儿原创】 文章来源:http://blog.csdn.net/21aspnet/archive/2007/07/07/1682200.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/07/08/816177.html

岁月如歌,人生如诗

虎跃千山龙腾海&#xff0c;春满家园喜满怀。新的一年&#xff0c;孕育着新的生命&#xff1b;新的一年&#xff0c;掸去了飞雪的扬花&#xff0c;满心的惬意告诉我们&#xff0c;所有的期盼与期望&#xff0c;一切的向往与憧憬正向着我们走近&#xff0c;向着春天融合。 ​ 新…

DOM编程以及domReady加载的几种方式

1&#xff0c;关于DOM编程 DOM编程主要是对dom树节点进行操作&#xff0c;所以你必须掌握基本的节点类型&#xff0c;如何去获取节点名字以及值&#xff08;这些相关知识你可以去网上查&#xff0c;这里推荐一个慕课学习网站->https://www.imooc.com/video/9491&#…

倒叙输出 php,php foreach正序倒序输出示例代码

实现代码&#xff1a;// 正序foreach($files as $file_num > $file) {if(is_file($directory.$file)){//$file iconv("gb2312","UTF-8",$file); //或者 iconv("gb2312","UTF-8",$value);$date substr($file,0,9);echo ;echo ;ech…

黑色系产业结构

转载于:https://www.cnblogs.com/luoluo-123/p/11143867.html

在Java 8 Lambda中创建自己的循环结构

Java没有简单的构造可以重复N次。 当然&#xff0c;我们可以创建一个for循环&#xff0c;但是很多时候我们甚至都不关心在循环中创建的变量。 我们只想重复一些代码N次&#xff0c;仅此而已。 使用Java 8中的lambda时&#xff0c;您可以尝试执行以下操作&#xff1a; public c…

Smart Form Tutorial(适用新手学习)

发现Smart Form在ECC6中和4.6C相比改变了不少&#xff0c;最近重新研究了一下。help.sap.com上的文档基本上是针对新特性的&#xff0c;不过例子却还是旧的。做个笔记省的以后找不到最新的example。最大的改变在Table上&#xff0c;现在table的header和footer比以前好做了。还是…

执行命令npm install XXX后仍然提示 Cannot find Module XXX

最近遇到一个问题&#xff0c;在服务器上配置完node环境后 执行npm start 命令后提示 Cannot find Module "Jquery" 然后就知道可能没有安装jquery 就继续在当前文件夹下执行 npm install jquery 但是再次执行后却仍然提示 Cannot find Module "Jquery"…

青蛙学Linux—Zabbix Web使用之Zabbix发现功能①自动网络发现

Zabbix的发现功能用于自动发现主机或者监控数据&#xff0c;包括以下三种发现类型&#xff1a; 自动网络发现&#xff08;Network discovery&#xff09;主动客户端自动注册&#xff08;Active agent auto-registration&#xff09;低级别发现&#xff08;low-level discovery&…

php 修改 wordpress,wordpress怎么编辑代码修改页面

wordpress是用PHP写的。PHP是服务器端执行脚本文件。然后到客户端(就是网页)生成html文件。你看到的html代码都是PHP程序在服务器端执行后生成的。若要修改代码主要是看想修改那一部分的内容。然后找到其对应的PHP代码.然后修改。在后台点击-->,就能看见你现在使用的wp主题的…

mpvue tabBar设定 app.json

1.微信小程序&#xff0c;设置src/app.json 中的tabBar 图标选择来自 iconfont 如图所示 小程序显示如下&#xff1a; 转载于:https://www.cnblogs.com/0909/p/11144861.html