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