package com.dy.common.mw.core;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import java.util.Timer;
|
import java.util.TimerTask;
|
|
/**
|
* @Author: liurunyu
|
* @Date: 2024/11/21 13:41
|
* @Description
|
*/
|
public class CoreTimer extends TimerTask {
|
|
private static final Logger log = LogManager.getLogger(CoreTimer.class.getName()) ;
|
|
private static final CoreTimer instance = new CoreTimer() ;
|
|
private Long workInterval = 100L ;//核心线程暂停间隔
|
|
private Timer timer;
|
|
private boolean stop;
|
|
private CoreTimer(){
|
this.timer = new Timer();
|
this.stop = false ;
|
}
|
|
public static CoreTimer getInstance(){
|
return instance ;
|
}
|
|
public void stop(){
|
this.stop = true ;
|
if(this.timer != null){
|
this.timer.cancel();
|
}
|
}
|
public boolean isStop(){
|
return this.stop ;
|
}
|
|
/**
|
* 设置/核心线程暂停间隔
|
* @param workInterval /核心线程暂停间隔
|
*/
|
public void setSleep(Long workInterval){
|
this.workInterval = workInterval ;
|
}
|
|
public void start(){
|
this.timer.schedule(this, 0 , this.workInterval);
|
}
|
|
/**
|
* TimerTask的run方法
|
*/
|
@Override
|
public void run() {
|
try{
|
/**
|
* 此处取出当前队列的节点数量,作为一个定量count处理,
|
* 原因:
|
* 在处理定量count过程中,可能有的节点又回到队列中,也可能新生节点进入队列中,即在处理过程中,队列可能又增长了
|
*/
|
int count = CoreUnit.taskQueue.size() ;
|
while(count > 0){
|
CoreTask task = (CoreTask)CoreUnit.taskQueue.pop() ;
|
if(task != null){
|
task.execute();
|
}
|
count-- ;
|
}
|
}catch(Exception e){
|
log.error("核心线程发生异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);;
|
}
|
}
|
}
|