package com.gwm.prophet.common.utils;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.concurrent.*;
/**
* @Author:langjf
* @Date: 2023/2/16
* @Desc
*/
public class Mytest {
private static ScheduledExecutorService heartBeatExecutor = Executors.newScheduledThreadPool(8);
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(50, 100,
5000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(30),
new ThreadPoolExecutor.CallerRunsPolicy());// 超过最大线程数,用主线程运行
public static void main(String[] args) {
doOpen();
}
private static void doOpen(){
threadPoolExecutor.execute(new open(heartBeatExecutor));
threadPoolExecutor.execute(new open(heartBeatExecutor));
threadPoolExecutor.execute(new open(heartBeatExecutor));
threadPoolExecutor.execute(new open(heartBeatExecutor));
threadPoolExecutor.execute(new open(heartBeatExecutor));
}
}
class open implements Runnable{
private ScheduledExecutorService heartBeatExecutor;
@Override
public void run() {
this.heartBeatExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getId());
}
}, 0, 5, TimeUnit.SECONDS);
}
public open(ScheduledExecutorService heartBeatExecutor) {
this.heartBeatExecutor = heartBeatExecutor;
}
}
定时器多线程执行
最新推荐文章于 2024-10-16 10:13:45 发布
该代码示例展示了如何在Java中创建并使用ScheduledExecutorService进行定时任务调度,以及ThreadPoolExecutor来执行任务。文章通过一个名为Mytest的类,初始化了两个线程池,一个用于心跳检测,另一个用于处理任务。doOpen方法触发了多个定时任务,每个任务间隔5秒打印当前线程ID。
摘要由CSDN通过智能技术生成