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. 安装Mosquitto学习MOTT协议

    1.源码的获取:http://mosquitto.org/files/source/ 2.直接解压tar文件,就可以得到所有的源码,里面有个配置文件config.mk,这个文件包含了Mosquitto ...

  2. 中间件和Django缓存

    中间件定义: 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类. 看下面的代码在settings里 ...

  3. [ZJOI2004]嗅探器

    题目概要: 在无向图中寻找出所有的满足下面条件的点:割掉这个点之后,能够使得一开始给定的两个点a和b不连通,割掉的点不能是a或者b.(ZJOI2004) 数据范围约定结点个数N≤100边数M≤N*(N ...

  4. 离线安装expect

    expect依赖tcl库 安装包: https://files.cnblogs.com/files/tozh/tcl8.4.11-src.tar.gz https://files.cnblogs.co ...

  5. python-闭包函数

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...

  6. Python(五) —— 内置模块

    文档参考:https://docs.python.org/zh-cn/3.7/library/index.html 随机模块——random 这里我们介绍几种常用 random 的操作   名称 功能 ...

  7. bootstrap顶部导航遮挡下面内容的解决办法

    使用bootstrap设置顶部导航,并将导航栏固定,代码如下: <nav class="navbar navbar-expand-lg navbar-light bg-light fi ...

  8. python selenium-webdriver 元素操作之键盘操作(五)

    上节介绍了模拟鼠标对元素的操作,本节主要介绍键盘对元素的操作,实际过程中鼠标对元素的操作比键盘对元素的操作更经常使用,但是键盘对元素的操作也很重要,本节主要介绍一下键盘对元素的操作. selenium ...

  9. python selenium-webdriver 元素操作之鼠标操作(四)

    上节内容主要说明了元素的定位,本节内容说要说对元素的操作,元素的操作分为两部分一部分是鼠标的操作,另一种是对键盘对元素的操作,下面我们主要讲解一下鼠标对元素的操作. webdriver 模块中几种比较 ...

  10. php使用insert语句动态添加用户

    <html> <head> <title>Adding User</title> </head> <body> <h2&g ...