fix cron bug

This commit is contained in:
Looly
2020-04-19 11:41:10 +08:00
parent f4fc97f9de
commit 8e42898d46
4 changed files with 84 additions and 20 deletions

View File

@@ -226,11 +226,23 @@ public class ThreadUtil {
if (millis == null) {
return true;
}
return sleep(millis.longValue());
}
try {
Thread.sleep(millis.longValue());
} catch (InterruptedException e) {
return false;
/**
* 挂起当前线程
*
* @param millis 挂起的毫秒数
* @return 被中断返回false否则true
* @since 5.3.2
*/
public static boolean sleep(long millis) {
if (millis > 0) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
return false;
}
}
return true;
}
@@ -243,15 +255,36 @@ public class ThreadUtil {
* @see ThreadUtil#sleep(Number)
*/
public static boolean safeSleep(Number millis) {
long millisLong = millis.longValue();
if (millis == null) {
return true;
}
return safeSleep(millis.longValue());
}
/**
* 考虑{@link Thread#sleep(long)}方法有可能时间不足给定毫秒数此方法保证sleep时间不小于给定的毫秒数
*
* @param millis 给定的sleep时间
* @return 被中断返回false否则true
* @see ThreadUtil#sleep(Number)
* @since 5.3.2
*/
public static boolean safeSleep(long millis) {
long done = 0;
while (done < millisLong) {
long before = System.currentTimeMillis();
if (false == sleep(millisLong - done)) {
long before;
long spendTime;
while (done >= 0 && done < millis) {
before = System.currentTimeMillis();
if (false == sleep(millis - done)) {
return false;
}
long after = System.currentTimeMillis();
done += (after - before);
spendTime = System.currentTimeMillis() - before;
if (spendTime <= 0) {
// Sleep花费时间为0或者负数说明系统时间被拨动
break;
}
done += spendTime;
}
return true;
}
@@ -318,6 +351,13 @@ public class ThreadUtil {
}
}
/**
* 等待当前线程结束. 调用 {@link Thread#join()} 并忽略 {@link InterruptedException}
*/
public static void waitForDie() {
waitForDie(Thread.currentThread());
}
/**
* 等待线程结束. 调用 {@link Thread#join()} 并忽略 {@link InterruptedException}
*