Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)
时间:2022-07-24
本文章向大家介绍Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 package com.thread.test.thread;
2 import java.util.Timer;
3 import java.util.TimerTask;
4 import java.util.concurrent.*;
5 import java.util.concurrent.locks.ReentrantLock;
6
7 /**
8 * schedule(Runnable command, long delay, TimeUnit unit)
9 * @ command: 需要执行的任务
10 * @ delay:任务执行需要延迟的时间
11 * @ unit:时间单位
12 *
13 * 一次性执行任务,执行完成结束
14 *
15 * ScheduledExecutorService:
16 * scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
17 * @ Runnable command: 需要执行的任务
18 * @ long initialDelay:第一次执行延迟的时间
19 * @ long period:间隔周期
20 * @ TimeUnit unit
21 *
22 * 包含首次延迟的周期性执行任务,第一次执行:delay+period,第二次:delay+2*period,以此类推...
23 * 停止:异常停止执行,主动调用停止方法
24 * 如果某一个周期执行时间超过设定的period,则后续顺延
25 *
26 * scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
27 * @ command: 需要执行的任务
28 * @ initialDelay:第一次执行延迟的时间
29 * @ delay:周期之间的延迟,间隔
30 * @ unit:前两个参数的单位
31 *
32 * 周期性执行任务:第一次执行:initialDelay+delay,第二次:initialDelay+2*delay,以此类推...
33 * 停止:异常停止执行,主动调用停止方法
34 * 不顺延
35 *
36 * Created by windwant on 2016/5/26.
37 */
38 public class MyExecutor {
39 public static void main(String[] args) {
40 testTimer();
41 }
42
43 public static void testTimer(){
44 new Timer().schedule(new MyTimerTask(), 2000, 5000);
45 }
46
47 public static void testExecutors(){
48 MyERunnable mer = new MyERunnable(5);
49 // ExecutorService es = Executors.newCachedThreadPool();
50 // ExecutorService es = Executors.newFixedThreadPool(2);
51 ScheduledExecutorService es = Executors.newScheduledThreadPool(2);
52 es.schedule(mer, 10000, TimeUnit.SECONDS.MILLISECONDS);
53 es.scheduleAtFixedRate(mer, 2, 10, TimeUnit.SECONDS);
54 es.scheduleWithFixedDelay(mer, 1, 5, TimeUnit.SECONDS);
55 es.shutdown();
56 }
57 }
58
59 class MyERunnable implements Runnable{
60 private int num = 0;
61 MyERunnable(int num){
62 this.num = num;
63 }
64 public void run() {
65 ReentrantLock lock = new ReentrantLock();
66 try{
67 lock.lock();
68 for (int i = 0; i < num; i++) {
69 System.out.println("current thread: " + Thread.currentThread().getName() + " num--" + i);
70 Thread.sleep(1000);
71 }
72 }catch (Exception e){
73 e.printStackTrace();
74 }finally {
75 lock.unlock();
76 }
77 }
78 }
79
80 class MyTimerTask extends TimerTask{
81
82 @Override
83 public void run() {
84 System.out.println("timer task");
85 }
86 }
项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- C++ 线程池的简易实现
- Flutter基础widgets教程-DataTable篇
- 2015-C++研发附加题第一题
- win7 64位 下,进程可申请的堆空间
- 生成N位格雷码
- sort 升序还是降序?priority_queue 大根堆还是小根堆?
- 将2N个整数分成两组,每组有N个数,并且满足,这两组的差的绝对值最小。
- C++11正则表达式 ECMAScript文法
- Flutter基础widgets教程-Divider篇
- std::vector扩容机制,.按1.5倍取整扩容,如下。
- 求一个数的临近的较大的2的整数次幂
- 在文件IO操作中,合理使用缓存。
- Flutter基础widgets教程-Drawer篇
- C++ 实现可变参数
- C++ 单例模式