java 多线程 day02 定时器

package com.czbk.thread;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
* http://blog.csdn.net/xiaoliuliu2050/article/details/74014463
* http://blog.csdn.net/myblog_dhy/article/details/46791173
*
*
* Created by chengtao on 17/11/30.
*
* timer 定时器
* schedule 调度方法
* new Timer.schedule(TimerTask task, long delay)
* new Timer.schedule(TimerTask task, long delay, long period)
* new Timer.schedule(TimerTask task, Date date)
* new Timer.schedule(TimerTask task, Date firstTime, long period)
*
*/
public class Thread02_TraditionalThread_Timer {
private static int count = 0;
public static void main(String[] args) {
//注意:定时器并没有开启新的线程。可以通过先执行printTime,后执行定时任务来验证
doSomethingAfer1OSecond();
printTime();

}

//主线程的计时器
public static void printTime(){
while (true){
System.out.println("主线程 计时:" + new Date().getSeconds());
try {
Thread.sleep(1000);
}catch (Exception e){
}
}
}

// 定时器1: 10秒以后执行某个任务,只执行一次
public static void doSomethingAfer1OSecond(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器1,经过: 10000 毫秒后执行,只执行一次");
}
}, 10000);
}

// 定时器2: 10秒以后执行某个任务,之后,每隔3秒执行一次
public static void doSomethingAfer1OSecondt_Afer3SecondsContinue(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器2,经过: 10000 毫秒后执行,之后每隔3000毫秒执行一次");
}
}, 10000,3000);
}

// 定时器3_1: 任务每2/4间隔执行
public static void doSomethingAfer2And4Second_1(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_1,任务每2/4间隔执行");
//------------ 定时器 内部再创建一个定时器,当外部的定时器打印了之后,内部的定时器开始计时,定时
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_1,任务每2/4间隔执行");
}
}, 2000);
//------------
}
}, 2000);
}

// 定时器3_2: 任务每2/4间隔执行,
public static void doSomethingAfer2And4Second_2(){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_2,任务每2/4间隔执行");
//------------ 定时器 内部再创建一个定时器,当外部的定时器打印了之后,内部的定时器开始计时,定时
new Timer().schedule(this, 2000);//报错:Task already scheduled
//------------
}
}, 2000);
}

// 定时器3_3: 任务每2/4间隔执行,
public static void doSomethingAfer2And4Second_3(){

class MyTimerTask extends TimerTask{
@Override
public void run() {
count++;
System.out.println("定时器3_3,任务每2/4间隔执行 count = " + count);
new Timer().schedule(new MyTimerTask(),2000+2000*(count%2));
}
}

new Timer().schedule(new MyTimerTask(), 2000);
}

// 定时器3_4: 任务每2/4间隔执行,
public static void doSomethingAfer2And4Second_4(){
while (true){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器3_4,任务每2/4间隔执行 ");
}
}, 2000);

}
}

// 定时器4: 任务在指定时间开始执行,
public static void doSomethingInTheNeedDate(){
while (true){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器4,任务在指定时间开始执行 ");
}
}, new Date());
}
}

// 定时器5: 任务在指定时间开始执行,之后每隔一段时间执行一次
public static void doSomethingInTheNeedDatePeriod(){
while (true){
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println("定时器5: 任务在指定时间开始执行,之后每隔1秒执行一次 ");
}
}, new Date(),1000);
}
}

}
原文地址:https://www.cnblogs.com/ctaixw/p/7934868.html