java - 如何中断计时器直到代码执行完毕
问题描述
我创建了一个需要在 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
}
}
}
解决方案
我会考虑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
}
}
推荐阅读
- java - 更改 JPA 生成的表列的数据类型
- spring - 将 JDA 事件中继到 Spring 事件子系统会挂起整个 Spring 应用程序
- ios - 以编程方式更改堆栈视图中容器的高度
- python - 表格边框未显示在 Outlook 桌面应用程序中,但在通过浏览器打开时在 gmail 和 Outlook 中可见
- authentication - 使用 NTAG 424 DNA TT 的身份验证提示
- javascript - 按 Enter 后使用 JQuery 事件单击过滤表结果
- android - 回收 BitmapShader 的 Bitmap
- angularjs - 如何在模块化 angularjs 范围内测试指令?
- c# - 我如何模拟 TryValidateModel
- openrefine - 有没有办法强制 Open Refine 将所有历史更改提取到 JSON 中