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

posted @ 2016-10-21 16:59  WindWant  阅读(6140)  评论(0编辑  收藏  举报
文章精选列表