使用ScheduledThreadPoolExecutor执行定时任务
ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor(2);
scheduled.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("time:");
}
}, 0, 40, TimeUnit.MILLISECONDS);//0表示首次执行任务的延迟时间,40表示每次执行任务的间隔时间,TimeUnit.MILLISECONDS执行的时间间隔数值单位
间隔单位毫秒:TimeUnit.MILLISECONDS 
间隔单位秒:TimeUnit.SECONDS 
间隔单位分钟:TimeUnit.MINUTES 
间隔单位小时:TimeUnit.HOURS 
间隔单位天:TimeUnit.DAYS
其中Runnable里面可以通过一个类实现Runnable接口,具体见
使用ThreadPoolExecutor进行多线程编程
一旦程序启动将无限制执行下去,实际中可以通过限制定时任务的次数或者时间来终止程序的执行。
1,限制程序执行的时间:scheduled.awaitTermination(100,TimeUnit.SECONDS); 这句话表明100毫秒后程序终止。
2,限制程序执行的次数:如果是单线程,那么可以直接定义一个静态变量count,每执行一次,count加一,如果count大于某个值就调用shutdown或者shutdownNow函数;如果是多线程,稍微要复杂一点,但是原理也是一样的。定义一个静态变量count,没执行一个也是count加一,只不过在执行加一操作之前需要加锁,执行完之后需要解锁。
 public class ScheduledMultiThreadTool {
     private  static Integer count =1;
     MyTimereTask myTimereTask = new MyTimereTask();
     private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
     ScheduledExecutorService scheduled =Executors.newScheduledThreadPool(2);
     public void start(){
         try {
             scheduled.scheduleWithFixedDelay(myTimereTask, 0,1, TimeUnit.SECONDS);
             scheduled.scheduleWithFixedDelay(myTimereTask, 0,1, TimeUnit.SECONDS);
             scheduled.scheduleWithFixedDelay(myTimereTask, 0,1, TimeUnit.SECONDS);
             scheduled.scheduleWithFixedDelay(myTimereTask, 0,1, TimeUnit.SECONDS);
             while (!scheduled.isTerminated()){
                 lock.readLock().lock();
                 if (count >20){
                     scheduled.shutdown();
                 }
                 lock.readLock().unlock();
             }
         }catch(Exception e){
             e.printStackTrace();
         }
         System.out.println("Finished all threads");
     }
     private class MyTimereTask implements Runnable {
         @Override
         public void run(){
             lock.writeLock().lock();
             System.out.println("第 "+count+ " 次执行任务,count="+count);
             count ++;
             lock.writeLock().unlock();
         }
     }
 }
使用ScheduledThreadPoolExecutor执行定时任务的更多相关文章
- 使用Timer和ScheduledThreadPoolExecutor执行定时任务
		Java使用Timer和ScheduledThreadPoolExecutor执行定时任务 定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些 ... 
- PHP执行定时任务
		PHP执行定时任务 1.当PHP像文件写入信息的时候 <?php for ($i=0; $i < 10; $i++) { $str="我是第".$i."条&q ... 
- java中服务器启动时,执行定时任务
		package com.ripsoft.util; import java.util.Calendar; import java.util.Timer; import javax.servlet.Se ... 
- Jenkins入门之执行定时任务
		通过前面我们讲解了如何通过Jenkins执行windows command,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下Build Now按钮来执行 ... 
- AspNet MVC中使用Hangfire执行定时任务
		Hangfire在Aspnet中执行定时任务: 第一步: NuGet中加入Hangfire包 第二步: 添加Owin的自启动 第三步.Hangfire的后台控制仪表盘默认情况下只能本地访问,外网访问需 ... 
- .NET Core中使用IHostedService结合队列执行定时任务
		最近遇到了这样的场景:每隔一段时间,需要在后台使用队列对一批数据进行业务处理. Quartz.NET是一种选择,在 .NET Core中,可以使用IHostedService执行后台定时任务.在本篇中 ... 
- 在ASP.NET MVC4中使用Quartz.NET执行定时任务
		本篇在ASP.NET MVC下实践使用Quartz.NET执行定时任务. 首先通过NuGet安装Quartz.NET. 使用Quartz.NET的大致思路是:1.实现IJob接口,定义具体要做的事情2 ... 
- ubuntu 下执行定时任务
		Window shell文件在linux系统下执行不了的解决办法 一些人喜欢用vim来写linux shell script, 但是, 有的人喜欢在Windows下用一些方便的编辑器(比如鼎鼎大名的N ... 
- MVC中使用Hangfire执行定时任务
		需求描述 项目中有一个通知公告的功能,在后台管理员添加公告后需要推送消息给所有注册用户,让其查看消息.消息推送移动端采用极光推送,但是消息在何时发送是个问题,比如说有一个重要的会议通知,可能希望在会议 ... 
随机推荐
- MVC Model验证
			[Required(ErrorMessage = "证件号不能为空!")] [RegularExpression(@"(^\d{18}$)|(^\d{15}$)|(^\d ... 
- jmeter简单的接口性能测试
			原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ... 
- visual studio 2017  创建 android 本地共享库(.so)  并从 C# android  项目中调用
			Developing Xamarin Android Native Applications ★★★★★ ★★★★ ★★★ ★★ ★ February 23, 2015 by Ankit Asthan ... 
- Salesforce Invoking Http Callouts and Testing Http Callouts
			本文参考官方文档和zero zhang的博客: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/ape ... 
- Collections.sort排序
			默认是升序,即Collections.sort(list),对list进行升序排列,如果想降序则需要通过compare这些参数来实现了 
- PythonStudy——Global关键字
			# 作用:将局部的变量提升为全局变量# 1.全局没有同名变量,直接提升局部变量为全局变量# 2.有同名全局变量,就是统一全局与局部的同名变量# -- 如果局部想改变全局变量的值(发生地址的变化),可以 ... 
- docker WARNING: IPv4 forwarding is disabled. 解决方法
			WARNING: IPv4 forwarding is disabled. Networking will not work. 在宿主机添加如下信息 echo net.ipv4.ip_forward= ... 
- Cygwin,一个提供linux命令行体验的Windows命令行工具
			安装 从官网下载,选择合适节点(带edu结尾的优先),安装 使用 未完待续... 
- 使用mediainfo工具统计每个视频文件(媒体文件)播放时长
			需求 1.运营那边需要统计大量视频文件的播放时长,并汇总记录到excel表中,问我有什么方法搞定 这边搜索了很多统计媒体文件时长的,主要有以下几种 1.使用java获取 2.使用python获取 3. ... 
- Java高级特性 第8节 网络编程技术
			一.网络概述 1.网络的概念和分类 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设 ... 
