From 7ee6ab2961deaa016b8d22ff1316e857cc9c9bbd Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 26 Jun 2019 13:40:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B3=BB=E7=BB=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=BB=B6=E8=BF=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/thread/ThreadManager.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java index 657fcc824..3b0816876 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java @@ -8,6 +8,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; @@ -15,13 +17,15 @@ import java.util.concurrent.atomic.AtomicInteger; public class ThreadManager { + private static ThreadManager instance = null; + private static final Logger LOGGER = LoggerFactory.getLogger(ThreadManager.class); - private PlatConfigureTask platConfigureTask; + private static PlatConfigureTask platConfigureTask; - private ScheduledThreadPoolExecutor scheduledExecutor; //管理task + private static volatile ScheduledThreadPoolExecutor scheduledExecutor; //管理task public void init() { scheduledExecutor = new ScheduledThreadPoolExecutor(16, new ScheduleThreadFactory()); @@ -34,6 +38,14 @@ public class ThreadManager { go(); } + private ThreadManager(){} + + public static synchronized ThreadManager getInstance(){ + if(instance==null){ + instance = new ThreadManager(); + } + return instance; + } static class ScheduleThreadFactory implements ThreadFactory { @@ -60,7 +72,7 @@ public class ThreadManager { } - public void go() { + public static void go() { int now = (int)(System.currentTimeMillis()/1000); scheduledExecutor = new ScheduledThreadPoolExecutor(16, new ScheduleThreadFactory()); @@ -69,8 +81,22 @@ public class ThreadManager { LOGGER.info("delayForMinute---->>>>{}" ,delayForMinute); scheduledExecutor.scheduleAtFixedRate(platConfigureTask, 10, PlatConfigureTask.SLEEP_INTEVAL_TIME, TimeUnit.SECONDS); scheduledExecutor.scheduleAtFixedRate(new MinuteTask(), delayForMinute, 60, TimeUnit.SECONDS); + scheduledExecutor.scheduleAtFixedRate(new Thread(){ + public void run () { + long lastMilis = System.currentTimeMillis(); + try { Thread.sleep(10000L); } catch (InterruptedException e) { } + long millis = System.currentTimeMillis(); + if((millis - lastMilis)-10000>10||(millis - lastMilis)-10000<-10){ + reStart(); + } + } + }, delayForMinute, 10, TimeUnit.SECONDS); scheduledExecutor.execute(new RetrySendIndicationThread("retry_send")); - + } + public static void reStart(){ + LOGGER.info("重启线程池!!"); + scheduledExecutor.shutdown(); + go(); } }