Java:在代码执行中实现周期性中断

Java:在代码执行中实现周期性中断,java,sleep,Java,Sleep,请建议以下伪代码的最佳实现: “每10分钟中断一次业务逻辑,然后进入睡眠状态5分钟”解决方案 不幸的是,和都不推荐使用。正如甲骨文所指出的 我应该使用什么来代替线程。挂起和线程。恢复? …谨慎的方法是让“目标线程”轮询一个变量 指示线程的所需状态(活动或挂起)。当所需状态被挂起时,线程将等待 您可以在无限循环内的子循环中执行逻辑。并在子循环中断条件下使用您的工作时间值: public static void main(String[] args) throws InterruptedExcept

请建议以下伪代码的最佳实现:

“每10分钟中断一次业务逻辑,然后进入睡眠状态5分钟”

解决方案 不幸的是,和都不推荐使用。正如甲骨文所指出的

我应该使用什么来代替
线程。挂起
线程。恢复

…谨慎的方法是让“目标线程”轮询一个变量 指示线程的所需状态(活动或挂起)。当所需状态被挂起时,线程将等待


您可以在无限循环内的子循环中执行逻辑。并在子循环中断条件下使用您的工作时间值:

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
    }
}