Timer
import java.util.Timer;
import java.util.TimerTask;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/12 15:06
*/
public class TimerDemo {
public static void main(String[] args) {
//Timer本身也是一个线程
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行了一次");
}
},3000,2000);
//Timer是单线程的,当处理多个任务时候,存在延时与设置定时器的时间有出入
//可能存在某个任务异常,导致后续任务无法正常执行
}
}
ScheduleExecutorService
ScheduleExecutorService是Jdk5引入的并发包,目的是弥补Timer的缺陷,内部使用了线程池。
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/12 15:15
*/
public class ScheduleExecutorDemo {
public static void main(String[] args) {
final ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);
pool.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "输出");
}
},0, 2, TimeUnit.SECONDS);
pool.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "输出");
}
}, 2, TimeUnit.SECONDS);
}
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。