Java多线程————定时器
一、定时器 定时器是一种控制任务延时调用,或者周期调用的技术。 作用:闹钟、定时邮件发送。
1、定时器的实现方式 方式一:Timer 方式二: ScheduledExecutorService
二、Timer定时器 1、构造器和方法
2、Timer定时器的特点和存在的问题
-
Timer是单线程,处理多个任务按照顺序执行,存在延时与设置定时器的时间有出入。 可能因为其中的某个任务的异常使Timer线程死掉,从而影响后续任务执行。
代码实例
package prohome;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo1 {
public static void main(String[] args) {
// 1. 创建 Timer 定时器
Timer timer = new Timer();// 定时器本身就是一个单线程
// 2. 调用方法处理 定时任务
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行AAA~~"+new Date());
}
},0,2000);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行BB~~~"+ new Date());
}
}, 0, 2000);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行CCC~~~"+ new Date());
}
}, 0, 3000);
}
}
二、ScheduledExecutorService定时器 1、ScheduledExecutorService是 jdk1.5中引入了并发包,目的是为了弥补Timer的缺陷, ScheduledExecutorService内部为线程池。
2、ScheduledExecutorService的优点 基于线程池,某个任务的执行情况不会影响其他定时任务的执行。
package prohome;
import java.util.Date;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TimerDemo2 {
public static void main(String[] args) {
// 创建ScheduleExecutorService 线程池 做定时器
ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);
// 开启定时任务
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行输出:AAA==>"+new Date());
}
},0,2, TimeUnit.SECONDS);
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行输出:BBB==>"+new Date());
}
},0,2,TimeUnit.SECONDS);
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行输出:CCC==》 " + new Date());
}
}, 0, 2, TimeUnit.SECONDS);
}
}
下一篇:
浅谈我理解的,bug如何定位前后端问题
