package com.thread.test.thread;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock; /**
* schedule(Runnable command, long delay, TimeUnit unit)
* @ command: 需要执行的任务
* @ delay:任务执行需要延迟的时间
* @ unit:时间单位
*
* 一次性执行任务,执行完成结束
*
* ScheduledExecutorService:
* scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
* @ Runnable command: 需要执行的任务
* @ long initialDelay:第一次执行延迟的时间
* @ long period:间隔周期
* @ TimeUnit unit
*
* 包含首次延迟的周期性执行任务,第一次执行:delay+period,第二次:delay+2*period,以此类推...
* 停止:异常停止执行,主动调用停止方法
* 如果某一个周期执行时间超过设定的period,则后续顺延
*
* scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
* @ command: 需要执行的任务
* @ initialDelay:第一次执行延迟的时间
* @ delay:周期之间的延迟,间隔
* @ unit:前两个参数的单位
*
* 周期性执行任务:第一次执行:initialDelay+delay,第二次:initialDelay+2*delay,以此类推...
* 停止:异常停止执行,主动调用停止方法
* 不顺延
*
* Created by windwant on 2016/5/26.
*/
public class MyExecutor {
public static void main(String[] args) {
testTimer();
} public static void testTimer(){
new Timer().schedule(new MyTimerTask(), 2000, 5000);
} public static void testExecutors(){
MyERunnable mer = new MyERunnable(5);
// ExecutorService es = Executors.newCachedThreadPool();
// ExecutorService es = Executors.newFixedThreadPool(2);
ScheduledExecutorService es = Executors.newScheduledThreadPool(2);
es.schedule(mer, 10000, TimeUnit.SECONDS.MILLISECONDS);
es.scheduleAtFixedRate(mer, 2, 10, TimeUnit.SECONDS);
es.scheduleWithFixedDelay(mer, 1, 5, TimeUnit.SECONDS);
es.shutdown();
}
} class MyERunnable implements Runnable{
private int num = 0;
MyERunnable(int num){
this.num = num;
}
public void run() {
ReentrantLock lock = new ReentrantLock();
try{
lock.lock();
for (int i = 0; i < num; i++) {
System.out.println("current thread: " + Thread.currentThread().getName() + " num--" + i);
Thread.sleep(1000);
}
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
} class MyTimerTask extends TimerTask{ @Override
public void run() {
System.out.println("timer task");
}
}

项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo

Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)的更多相关文章

  1. ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别

    ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别 ScheduledThreadPoolExecut ...

  2. Java并发之BlockingQueue的使用

    Java并发之BlockingQueue的使用 一.简介 前段时间看到有些朋友在网上发了一道面试题,题目的大意就是:有两个线程A,B,  A线程每200ms就生成一个[0,100]之间的随机数, B线 ...

  3. JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理

    本文记录: 1,使用ScheduledExecutorService的 scheduleAtFixedRate 方法执行周期性任务的过程,讨论了在任务周期执行过程中出现了异常,会导致周期任务失败. 2 ...

  4. Java中timer的schedule()和schedualAtFixedRate()函数的区别

    本文主要讨论java.util.Timer的schedule(timerTask,delay,period)和scheduleAtFixedRate(timerTask,delay,period)的区 ...

  5. java并发之固定对象与实例

    java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...

  6. 深入理解Java并发之synchronized实现原理

    深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入 ...

  7. Java并发之Semaphore的使用

    Java并发之Semaphore的使用 一.简介 今天突然发现,看着自己喜欢的球队发挥如此的棒,然后写着博客,这种感觉很爽.现在是半场时间,就趁着这个时间的空隙,说说Java并发包中另外一个重量级的类 ...

  8. Java并发之CyclicBarria的使用(二)

    Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文 ...

  9. Java并发之CyclicBarria的使用

    Java并发之CyclicBarria的使用 一.简介 笔者在写CountDownLatch这个类的时候,看到了博客园上的<浅析Java中CountDownLatch用法>这篇博文,为博主 ...

随机推荐

  1. Inno Setup info

    Introduce:     Inno Setup is a free installer for Windows programs. First introduced in 1997, Inno S ...

  2. 获取PC或移动设备的所有IP地址

    不论是PC还是移动设备,都有可能同时存在几个IP地址(如具有多块网卡),本文介绍怎样获得PC或移动设备的所有IP地址. // 获得所有IP地址 public static void get_ip(){ ...

  3. Atitit. 获取cpu占有率的 java c# .net php node.js的实现

    Atitit. 获取cpu占有率的 java c# .net php node.js的实现 通过wmic接口获取cpu占有率 C:\Users\Administrator.ATTILAXPC188&g ...

  4. MyEclipse10 中的两种FreeMarker插件的安装与配置

    第一个插件是:                                       freemarker-ide MyEclipce10.0中安装FreeMarker插件,这绝对是最简单的方法 ...

  5. 【原创】SQLServer将数据导出为SQL脚本的方法

    最近很多同学问到一个问题,如何将MSSQLServer的数据库以及里面的数据导出为SQL脚本,主要问的是MSSQLServer2000和2005,因为2008的管理器已经有了这个功能,2000和200 ...

  6. INFO: task java:27465 blocked for more than 120 seconds不一定是cache太大的问题

    这几天,老有几个环境在中午收盘后者下午收盘后那一会儿,系统打不开,然后过了一会儿,进程就消失不见了,查看了下/var/log/message,有如下信息: Dec 12 11:35:38 iZ23nn ...

  7. 七个结构模式之代理模式(Proxy Pattern)

    定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...

  8. Linux IO函数的使用和区别

    Linux系统中的IO函数主要有read.write.recv.send.recvmsg.sendmsg.readv.writev,本篇主要介绍他们的使用以及区别. read函数: #include ...

  9. SQL Server 跨库同步数据

    最近有个需求是要跨库进行数据同步,两个数据库分布在两台物理计算机上,自动定期同步可以通过SQL Server代理作业来实现,但是前提是需要编写一个存储过程来实现同步逻辑处理.这里的存储过程用的不是op ...

  10. 如何订阅Form的自定义事件

    Window Form类有很多的属性/方法和事件,其中事件属于一种发布订阅模式 .订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主体对象.这个主体对象在自身状态变化时,会通知所 ...