Commit 6b71ce70 authored by yanzg's avatar yanzg

升级新版本

parent 8cd1fa39
...@@ -2,8 +2,12 @@ package com.yanzuoguang.util.helper; ...@@ -2,8 +2,12 @@ package com.yanzuoguang.util.helper;
import com.yanzuoguang.util.log.Log; import com.yanzuoguang.util.log.Log;
import com.yanzuoguang.util.thread.ThreadHelper; import com.yanzuoguang.util.thread.ThreadHelper;
import com.yanzuoguang.util.vo.Ref;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
/** /**
...@@ -15,7 +19,9 @@ public class YzgTimeout { ...@@ -15,7 +19,9 @@ public class YzgTimeout {
public static final int TIME_OUT_DEFAULT = 15 * 1000; public static final int TIME_OUT_DEFAULT = 15 * 1000;
public static final int TIME_OUT_TIP = 10 * 1000; public static final int TIME_OUT_TIP = 10 * 1000;
public static final int TIME_OUT_UNIT = 10; private static ExecutorService executorService;
private static final Queue<TimeInfo> queueInfos = new ArrayBlockingQueue<>(500);
/** /**
* 超时监控 * 超时监控
...@@ -36,7 +42,7 @@ public class YzgTimeout { ...@@ -36,7 +42,7 @@ public class YzgTimeout {
* @param runnable 运行函数 * @param runnable 运行函数
*/ */
public static void timeOut(Class<?> cls, String message, Runnable runnable, Consumer<Long> consumer) { public static void timeOut(Class<?> cls, String message, Runnable runnable, Consumer<Long> consumer) {
timeHeart(TIME_OUT_DEFAULT, TIME_OUT_UNIT, TIME_OUT_TIP, runnable, (time) -> { timeHeart(TIME_OUT_DEFAULT, TIME_OUT_TIP, runnable, (time) -> {
Log.error(cls, "%s超时,已经执行%d豪秒,正在等待执行完成", message, time); Log.error(cls, "%s超时,已经执行%d豪秒,正在等待执行完成", message, time);
if (consumer != null) { if (consumer != null) {
consumer.accept(time); consumer.accept(time);
...@@ -51,7 +57,7 @@ public class YzgTimeout { ...@@ -51,7 +57,7 @@ public class YzgTimeout {
* @param heart 心跳函数 * @param heart 心跳函数
*/ */
public static void timeHeart(Runnable runnable, YzgTimeoutHeart heart) { public static void timeHeart(Runnable runnable, YzgTimeoutHeart heart) {
timeHeart(1000, 1000, 10, runnable, heart); timeHeart(TIME_OUT_DEFAULT, TIME_OUT_TIP, runnable, heart);
} }
/** /**
...@@ -59,13 +65,35 @@ public class YzgTimeout { ...@@ -59,13 +65,35 @@ public class YzgTimeout {
* *
* @param tipOutDefault 默认超时时间 * @param tipOutDefault 默认超时时间
* @param timeOutTip 超时心跳间隔 * @param timeOutTip 超时心跳间隔
* @param tipUnit 监听间隔时间(监听任务完成间隔时间)
* @param runnable 运行函数 * @param runnable 运行函数
* @param heart 心跳函数 * @param heart 心跳函数
*/ */
public static void timeHeart(int tipOutDefault, int timeOutTip, int tipUnit, public static void timeHeart(int tipOutDefault, int timeOutTip,
Runnable runnable, YzgTimeoutHeart heart) { Runnable runnable, YzgTimeoutHeart heart) {
final Ref<Boolean> isRun = new Ref<>(false); TimeInfo timeInfo = getTimeInfo(tipOutDefault, timeOutTip, heart);
try {
runnable.run();
} finally {
synchronized (timeInfo) {
timeInfo.setRun(true);
}
}
}
private static TimeInfo getTimeInfo(int tipOutDefault, int timeOutTip, YzgTimeoutHeart heart) {
init();
TimeInfo timeInfo = new TimeInfo(tipOutDefault, timeOutTip, heart);
queueInfos.add(timeInfo);
return timeInfo;
}
private static void init() {
synchronized (YzgTimeout.class) {
if (executorService == null) {
executorService = new ThreadPoolExecutor(1, 10, 1000,
TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10));
}
}
ThreadHelper.runThread(() -> { ThreadHelper.runThread(() -> {
try { try {
long timeMax = tipOutDefault; long timeMax = tipOutDefault;
...@@ -83,12 +111,51 @@ public class YzgTimeout { ...@@ -83,12 +111,51 @@ public class YzgTimeout {
ex.printStackTrace(); ex.printStackTrace();
} }
}); });
try {
runnable.run();
} finally {
synchronized (isRun) {
isRun.value = true;
} }
}
class TimeInfo {
private int timeOutDefault;
private int timeOutTip;
private YzgTimeoutHeart heart;
private boolean isRun;
public TimeInfo(int timeOutDefault, int timeOutTip, YzgTimeoutHeart heart) {
this.timeOutDefault = timeOutDefault;
this.timeOutTip = timeOutTip;
this.heart = heart;
}
public int getTimeOutDefault() {
return timeOutDefault;
} }
public void setTimeOutDefault(int timeOutDefault) {
this.timeOutDefault = timeOutDefault;
}
public int getTimeOutTip() {
return timeOutTip;
}
public void setTimeOutTip(int timeOutTip) {
this.timeOutTip = timeOutTip;
}
public YzgTimeoutHeart getHeart() {
return heart;
}
public void setHeart(YzgTimeoutHeart heart) {
this.heart = heart;
}
public boolean isRun() {
return isRun;
}
public void setRun(boolean run) {
isRun = run;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment