线程发送时间间隔次数

    xiaoxiao2021-03-25  82

    @Service @HessianService(value = "/notice", serviceInterface = NoticeService.class) public class NoticeServiceImpl   implements  NoticeService{     @Resource     private SystemNoticeManger systemNoticeManger;          private static Logger log = Loggers.serverStatusStatisticsLogger;     @Override     public int sendNotice(String content) {                  ApplicationContextHolder.getBean(WorldContainer.class).sendInformAll(195, content);         log.info("---------------------sendNotice--------------------------------");         return 1;     }     @Override     public int sendNotice2(final String content, int time, int seconds) {         seconds*=1000;         PeriodNoticeTimer pNoticeTimer = new PeriodNoticeTimer(time,seconds,new TimerTask() {             @Override             public void run() {                 sendNotice(content);             }         })    ;             pNoticeTimer.begin();                                     return 0;

        }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    public class PeriodTimerManager {     private Timer _timer;     private AtomicBoolean isClean = new AtomicBoolean(Boolean.TRUE);     private final static PeriodTimerManager instance = new PeriodTimerManager();     public final static PeriodTimerManager getInstance() {         return instance;     }     private void checkAndRecreate() {         if (isClean.compareAndSet(Boolean.TRUE, Boolean.FALSE)) {             _timer = new Timer("T-PeriodNoticeTimer", false);         }     }     public void schedule(TimerTask task, long delay, long period) {         checkAndRecreate();         _timer.schedule(task, delay, period);     }     public void purge() {         _timer.purge();     }     public void cancel() {         if (!ObjectUtil.isEmptyObject(_timer)) {             _timer.cancel();             _timer = null;             isClean.compareAndSet(Boolean.FALSE, Boolean.TRUE);         }     } --------------------------------------------------------------------------------------------------------------------------------------

    public class PeriodNoticeTimer extends TimerTask {     private int period;     private int time;     private TimerTask timerTask;     private int currentTime;     public PeriodNoticeTimer(int time, int period, TimerTask timerTask) {         this.period = period;         this.time = time;         this.timerTask = timerTask;     }     public void begin() {         //清除之前的任务         PeriodTimerManager.getInstance().cancel();         //工具只需最后的执行任务在执行         PeriodTimerManager.getInstance().schedule(this, 500, period);     }     @Override     public void run() {         timerTask.run();         currentTime++;         if (currentTime >= time) {             this.cancel();             //移除所有已取消的任务             PeriodTimerManager.getInstance().purge();             //在此计时器调用的计时器任务的 run方法内调用此方法,             //就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务             //最后销毁定时器             PeriodTimerManager.getInstance().cancel();         }     }     public static void main(String[] args) {         PeriodNoticeTimer pNoticeTimer = new PeriodNoticeTimer(10, 1000, new TimerTask() {             private int index = 1;             @Override             public void run() {                 System.err.println("11111" + "   " + index++);             }         });         pNoticeTimer.begin();         try {             Thread.sleep(2000);         } catch (InterruptedException e) {             e.printStackTrace();         }         PeriodNoticeTimer pNoticeTimer2 = new PeriodNoticeTimer(10, 2000, new TimerTask() {             private int index = 1;             @Override             public void run() {                 System.err.println("2222" + "   " + index++);             }         });         pNoticeTimer2.begin();     } }

    转载请注明原文地址: https://ju.6miu.com/read-19231.html

    最新回复(0)