首页 > 解决方案 > 如何中断计时器直到代码执行完毕

问题描述

我创建了一个需要在 java 驱动的 PLC 上运行的状态机。我想像现在一样以 250 毫秒的间隔检查/运行代码。唯一的问题是,在某些州,我实施了延迟。所以我想要的是该延迟(例如 1 秒延迟)首先完成,然后 250 毫秒间隔计时器可以再次继续。您将如何执行此操作/如何中断 250 毫秒计时器,直到代码完成执行?

public class demoClass{

    public void main(){
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                switch (StateMachine()) { //statemachine determines logic between states
                    case s10_StandBy:
                        doSomething_1();
                        break;

                    case s20_NormalStartOrFlush:
                        doSomething_2();
                        break;
        
                }
            }
        }, 0, 250);
    }
    
    public void doSomething_1(){
    // for example a one second delay is implemented here
    }
    
    }
}

标签: javatimerdelayinterrupt

解决方案


我会考虑ScheduledExecutorService以这种方式使用和重写你的主要方法:

public class demoClass{

    public void main(){
        Runnable task1 = () -> {
            switch (StateMachine()) { //statemachine determines logic between states
                case s10_StandBy:
                    doSomething_1();
                    break;

                case s20_NormalStartOrFlush:
                    doSomething_2();
                    break;

            }
        };

        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        service.scheduleWithFixedDelay(task1, 0, 250, TimeUnit.MILLISECONDS);
    }
    
    public void doSomething_1(){
    // for example a one second delay is implemented here
    }
}

推荐阅读