大佬们,直接使用Timer 提示用ScheduledExecutorService 替代好点,于是自己写了个工具类,麻烦看看有没有毛病,忘大佬们不吝赐教
public class TimerUtil {
private static TimerUtil instance;
private final ScheduledExecutorService scheduledExecutorService;
private TimerUtil() {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
scheduledExecutorService = new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), namedThreadFactory);
}
public static TimerUtil getInstance() {
if (instance == null) {
synchronized (TimerUtil.class) {
if (instance == null) {
instance = new TimerUtil();
}
}
}
return instance;
}
/**
* @param delayTime 延迟时间
* @param listener 回调
*/
public void delayTimer(int delayTime, OnRunListener listener) {
delayTimer(delayTime, TimeUnit.MILLISECONDS, listener);
}
/**
* @param delayTime 延迟时间
* @param unit 单位
* @param listener 回调
*/
public void delayTimer(int delayTime, TimeUnit unit, OnRunListener listener) {
if (null != scheduledExecutorService) {
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
if (listener != null) {
listener.run();
}
}
}, delayTime, unit);
}
}
/**
* @param intervalTime 时间间隔
* @param listener 回调
*/
public void cycleTimer(int intervalTime, OnRunListener listener) {
cycleTimer(0, intervalTime, TimeUnit.MILLISECONDS, listener);
}
/**
* @param startTime 开始时间
* @param intervalTime 时间间隔
* @param listener 回调
*/
public void cycleTimer(int startTime, int intervalTime, OnRunListener listener) {
cycleTimer(startTime, intervalTime, TimeUnit.MILLISECONDS, listener);
}
/**
* @param startTime 开始时间
* @param intervalTime 时间间隔
* @param unit 单位
* @param listener 回调
*/
public void cycleTimer(int startTime, int intervalTime, TimeUnit unit, OnRunListener listener) {
if (null != scheduledExecutorService) {
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
if (listener != null) {
listener.run();
}
}
}, startTime, intervalTime, unit);
}
}
public interface OnRunListener {
void run();
}
}