Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)
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)的更多相关文章
- ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别
ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别 ScheduledThreadPoolExecut ...
- Java并发之BlockingQueue的使用
Java并发之BlockingQueue的使用 一.简介 前段时间看到有些朋友在网上发了一道面试题,题目的大意就是:有两个线程A,B, A线程每200ms就生成一个[0,100]之间的随机数, B线 ...
- JAVA线程池ScheduledExecutorService周期性地执行任务 与单个Thread周期性执行任务的异常处理
本文记录: 1,使用ScheduledExecutorService的 scheduleAtFixedRate 方法执行周期性任务的过程,讨论了在任务周期执行过程中出现了异常,会导致周期任务失败. 2 ...
- Java中timer的schedule()和schedualAtFixedRate()函数的区别
本文主要讨论java.util.Timer的schedule(timerTask,delay,period)和scheduleAtFixedRate(timerTask,delay,period)的区 ...
- java并发之固定对象与实例
java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...
- 深入理解Java并发之synchronized实现原理
深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入 ...
- Java并发之Semaphore的使用
Java并发之Semaphore的使用 一.简介 今天突然发现,看着自己喜欢的球队发挥如此的棒,然后写着博客,这种感觉很爽.现在是半场时间,就趁着这个时间的空隙,说说Java并发包中另外一个重量级的类 ...
- Java并发之CyclicBarria的使用(二)
Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文 ...
- Java并发之CyclicBarria的使用
Java并发之CyclicBarria的使用 一.简介 笔者在写CountDownLatch这个类的时候,看到了博客园上的<浅析Java中CountDownLatch用法>这篇博文,为博主 ...
随机推荐
- 透过IL看C#:switch语句(转)
透过IL看C# switch语句(上) 摘要: switch语句是 C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.本文介绍了当向 switch语句中传入不同类型的参数时,编译器为其生 ...
- spring 使用redis集群配置
上面两篇介绍了redis集群的配置合一些基本的概念,所以接下来当然是要在项目中使用咯,redis的java支持已经做的非常好了,所以我们来试着使用这些api来进行redis的操作,首先我们需要操作re ...
- mybatis xml 中的特殊符转义字符号和模糊查询
xml特殊符号转义写法 < < 小于 <= <= 小于或等于 > > 大于 >= >= 大于或等于 <> <> 不等于 & ...
- 第 21 章 CSS3 文本效果
学习要点: 1.文本阴影 2.文本裁剪 3.文本描边 4.文本填充 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 中文本效果,其中也包含一些之前讲过的 CSS3 文本属性. 一.文本阴影 ...
- 自定义开关ToggleButton的使用
[代码]: toggleMe.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override p ...
- Loadrunner中web_find和web_reg_find函数的使用与区别
总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find():这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一.web_find( ...
- 钉钉客户端JS-API权限签名算法.NET版
前段时间写了一篇博文<钉钉如何进行PC端开发>,在里面并未解决本地生成签名的问题,需要到官网进行生成,由于钉钉门票等认证信息会超期,因此,必须能本地用代码自动更新相关参数信息,来换取签名. ...
- sass菜鸟教程
1.安装sass 在安装sass前需要安装ruby,下载ruby时要注意自己电脑是32位还是64位,下载好正常安装,但注意一下:要勾选下图这一项,添加环境变量(安装过JDK的朋友应该知道环境变量) 下 ...
- CSS的盒子模型
1.边框:包裹内容的容器 统一设置:border: border-width border-style border-color 上:border-top 下:border-bottom 左:bord ...
- swift学习笔记之-可选链式调用
//可选链式调用 import UIKit /*可选链式调用(Optional Chaining) 1.在可选值上请求和调用该可选值的属性.方法及下标的方法,如果可选值有值,那么调用就会成功,返回可选 ...