Java:在代码执行中实现周期性中断
请建议以下伪代码的最佳实现: “每10分钟中断一次业务逻辑,然后进入睡眠状态5分钟”解决方案 不幸的是,和都不推荐使用。正如甲骨文所指出的 我应该使用什么来代替Java:在代码执行中实现周期性中断,java,sleep,Java,Sleep,请建议以下伪代码的最佳实现: “每10分钟中断一次业务逻辑,然后进入睡眠状态5分钟”解决方案 不幸的是,和都不推荐使用。正如甲骨文所指出的 我应该使用什么来代替线程。挂起和线程。恢复? …谨慎的方法是让“目标线程”轮询一个变量 指示线程的所需状态(活动或挂起)。当所需状态被挂起时,线程将等待 您可以在无限循环内的子循环中执行逻辑。并在子循环中断条件下使用您的工作时间值: public static void main(String[] args) throws InterruptedExcept
线程。挂起和线程。恢复?
…谨慎的方法是让“目标线程”轮询一个变量
指示线程的所需状态(活动或挂起)。当所需状态被挂起时,线程将等待
您可以在无限循环内的子循环中执行逻辑。并在子循环中断条件下使用您的工作时间值:
public static void main(String[] args) throws InterruptedException {
final long WORKING_TIME = 10 * 60 * 1000;
final long SLEEPING_TIME = 5 * 60 * 1000;
long startTime;
while (true) {
startTime = System.currentTimeMillis();
while (System.currentTimeMillis() < startTime + WORKING_TIME) {
System.out.println("working..."); // implement your logic here
}
Thread.sleep(SLEEPING_TIME); // sleeping for SLEEPING_TIME
}
}
publicstaticvoidmain(String[]args)抛出InterruptedException{
最终长工作时间=10*60*1000;
最终长时间睡眠时间=5*60*1000;
长启动时间;
while(true){
startTime=System.currentTimeMillis();
while(System.currentTimeMillis()
这应该实现线程睡眠(5*60*1000)代码>在您的实现中的某个地方。wait()和sleep()?DimaSan,IMHO,您的建议只会产生一次睡眠,持续时间为5分钟。我想在每10分钟执行一次后,定期睡5分钟。非常感谢。这是一个简单而优雅的解决方案,我正在尝试做的事情(比计时器、多线程等简单得多),欢迎您!当然,它很简单,但可能适合您的需要。
final long executionTimeSlice = 10 * 60 * 1_000; // in milliseconds
final long suspendedDuration = 5 * 60 * 1_000; // in milliseconds
final Thread businessThread = Thread.currentThread();
Thread timerThread = new Thread(() -> {
while (true) {
businessThread.suspend();
Thread.sleep(suspendedDuration);
businessThread.resume();
Thread.sleep(executionTimeSlice);
}
});
timerThread.setDaemon(true);
timerThread.start();
public static void main(String[] args) throws InterruptedException {
final long WORKING_TIME = 10 * 60 * 1000;
final long SLEEPING_TIME = 5 * 60 * 1000;
long startTime;
while (true) {
startTime = System.currentTimeMillis();
while (System.currentTimeMillis() < startTime + WORKING_TIME) {
System.out.println("working..."); // implement your logic here
}
Thread.sleep(SLEEPING_TIME); // sleeping for SLEEPING_TIME
}
}