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执行定时任务的更多相关文章

  1. 使用Timer和ScheduledThreadPoolExecutor执行定时任务

    Java使用Timer和ScheduledThreadPoolExecutor执行定时任务 定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些 ...

  2. PHP执行定时任务

    PHP执行定时任务 1.当PHP像文件写入信息的时候 <?php for ($i=0; $i < 10; $i++) { $str="我是第".$i."条&q ...

  3. java中服务器启动时,执行定时任务

    package com.ripsoft.util; import java.util.Calendar; import java.util.Timer; import javax.servlet.Se ...

  4. Jenkins入门之执行定时任务

    通过前面我们讲解了如何通过Jenkins执行windows command,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下Build Now按钮来执行 ...

  5. AspNet MVC中使用Hangfire执行定时任务

    Hangfire在Aspnet中执行定时任务: 第一步: NuGet中加入Hangfire包 第二步: 添加Owin的自启动 第三步.Hangfire的后台控制仪表盘默认情况下只能本地访问,外网访问需 ...

  6. .NET Core中使用IHostedService结合队列执行定时任务

    最近遇到了这样的场景:每隔一段时间,需要在后台使用队列对一批数据进行业务处理. Quartz.NET是一种选择,在 .NET Core中,可以使用IHostedService执行后台定时任务.在本篇中 ...

  7. 在ASP.NET MVC4中使用Quartz.NET执行定时任务

    本篇在ASP.NET MVC下实践使用Quartz.NET执行定时任务. 首先通过NuGet安装Quartz.NET. 使用Quartz.NET的大致思路是:1.实现IJob接口,定义具体要做的事情2 ...

  8. ubuntu 下执行定时任务

    Window shell文件在linux系统下执行不了的解决办法 一些人喜欢用vim来写linux shell script, 但是, 有的人喜欢在Windows下用一些方便的编辑器(比如鼎鼎大名的N ...

  9. MVC中使用Hangfire执行定时任务

    需求描述 项目中有一个通知公告的功能,在后台管理员添加公告后需要推送消息给所有注册用户,让其查看消息.消息推送移动端采用极光推送,但是消息在何时发送是个问题,比如说有一个重要的会议通知,可能希望在会议 ...

随机推荐

  1. centos安装mycat

    1.参考前文安装jdk 2.官网 http://www.mycat.io/ 或 http://dl.mycat.io/ 下载mycat 3.解压安装 cd /usr/local cp /home/ta ...

  2. SpringCloud基于消息总线的配置中心

    @https://www.cnblogs.com/ityouknow/p/6931958.html Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点 ...

  3. 10. Firewalls (防火墙 2个)

    Netfilter是在标准Linux内核中实现的强大的包过滤器. 用户空间iptables工具用于配置. 它现在支持数据包过滤(无状态或有状态),各种网络地址和端口转换(NAT / NAPT),以及用 ...

  4. SQL server 多个字段设为主键

    create table teacher_course( ton char(8) not null, classno char(8) not null, con char(4) not null pr ...

  5. car的旅行路线

    https://www.luogu.org/problemnew/show/P1027 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形 ...

  6. xamarin android 汉字转拼音

    使用微软的 ChnCharInfo.dll,这个库不仅能在 windows 下完美运行,竟单独在android下也可以完美运行,直接引用即可.当然是使用 visual studio 开发安卓啦,具体用 ...

  7. voc-fcn-alexnet网络结构理解

    一.写在前面 fcn是首次使用cnn来实现语义分割的,论文地址:fully convolutional networks for semantic segmentation 实现代码地址:https: ...

  8. VS2015 使用GIT同步到github

    https://www.cnblogs.com/newP/p/5732431.html(参考) 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger) 获取(Fetch):从 ...

  9. soapui的简单使用

    工具下载地址:https://www.soapui.org/downloads/soapui.html 名词解释 https://www.cnblogs.com/fcfblog/p/5830205.h ...

  10. Behavior开发时找不到Expression.Interactions的问题解决

    比如下面使用Behavior的例子,需要参照:Microsoft.Expression.Interactions.dll. <Window x:Class="VisualStudioB ...