You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					
					
						
							62 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							2.1 KiB
						
					
					
				| package com.ynxbd.common.helper.timer;
 | |
| 
 | |
| import lombok.extern.slf4j.Slf4j;
 | |
| 
 | |
| import java.util.Timer;
 | |
| import java.util.TimerTask;
 | |
| 
 | |
| @Slf4j
 | |
| public abstract class TimerManager extends TimerTask {
 | |
| 
 | |
|     public abstract static class TimerMethod {
 | |
|         public abstract void run() throws Exception;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param timerMethod 执行器
 | |
|      * @param second      间隔(s)
 | |
|      */
 | |
|     public static synchronized Timer setInterval(TimerMethod timerMethod, int second) {
 | |
|         try {
 | |
|             if (second == 0) {
 | |
|                 throw new Exception("周期间隔不能为0s");
 | |
|             }
 | |
|             long periodSecond = second * 1000L;
 | |
|             Timer timer = new Timer();
 | |
|             timer.schedule(new TimerManager() {
 | |
|                 @Override
 | |
|                 public synchronized void run() {
 | |
|                     try {
 | |
|                         long begTime = System.currentTimeMillis(); // 开始时间
 | |
|                         timerMethod.run();
 | |
|                         long endTime = System.currentTimeMillis(); // 结束时间
 | |
|                         long runTime = (endTime - begTime); // 耗时
 | |
| 
 | |
|                         if (runTime > periodSecond) {
 | |
|                             Thread.sleep(periodSecond);
 | |
|                         } else if (runTime > (periodSecond / 2)) {
 | |
|                             Thread.sleep((periodSecond / 2));
 | |
|                         }
 | |
|                         log.info("[定时器]执行耗时:" + runTime + "ms");
 | |
|                     } catch (Exception e) {
 | |
|                         log.error(e.getMessage());
 | |
|                         e.printStackTrace();
 | |
|                         try {
 | |
|                             Thread.sleep(periodSecond);
 | |
|                         } catch (Exception exception) {
 | |
|                             exception.printStackTrace();
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }, 0, periodSecond);
 | |
|             return timer;
 | |
|         } catch (Exception e) {
 | |
|             e.printStackTrace();
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     public synchronized static void closeTimer(Timer timer) {
 | |
|         timer.cancel();
 | |
|     }
 | |
| } |