【发布时间】:2014-08-19 22:32:30
【问题描述】:
我有一个对我来说很奇怪的问题。我实现了Runnable,用ScheduledExecutorService 执行。问题是,它只执行一次......
这是有用的代码(ev 是一个枚举):
private class MenuEventsListener implements Runnable {
@Override
public void run() {
System.out.println("Next iteration...");
switch(ev) {
case DESIGNER:
foo();
break;
case EXIT:
dispose();
System.exit(0);
break;
}
ev = MenuEvents.ENUM_LAST;
}
}
有趣的是,如果我用一些 if-else 语句替换那个 switch,它工作正常,这意味着这个 Runnable 按照我的要求每 50 毫秒执行一次......!
private class MenuEventsListener implements Runnable {
@Override
public void run() {
System.out.println("Next iteration...");
if (ev == MenuEvents.DESIGNER)
foo();
else if (ev == MenuEvents.EXIT) {
dispose();
System.exit(0);
}
ev = MenuEvents.ENUM_LAST;
}
}
这是调度设置:
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new MenuEventsListener(),
0, 50, TimeUnit.MILLISECONDS);
为什么 Runnable 每 50ms 用 if-else 语句调用一次,为什么只用 switch 调用一次??
编辑:因为你问,这里是 MenuEvents 和 ev 的声明:
public enum MenuEvents {
DESIGNER, CONFIG, ABOUT, BACKMENU, EXIT, ENUM_LAST
};
public MenuEvents;
是的,ENUM_LAST 我试图重现 C 约定,但我也将它用作NULL 的一种值。
【问题讨论】:
-
我编辑了我的问题以提供一些精确度
标签: java scheduled-tasks runnable scheduledexecutorservice