我想要一个每秒检查数据库中是否有更新的方法,如果该方法发现数据库中有更改,它将调用另一个方法来执行所需的操作。
我面临的问题是,我想要一个每秒不断重复的方法,即使它调用另一个方法来执行操作块。
我该怎么做?
我已经使用了这段代码
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable r = new Runnable() {
@Override
public void run() {
try {
CheckNewRequest();
System.out.println("rode road rowd rowed");
} catch (Exception e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, e.toString(), "Error CheckNewRequest()", JOptionPane.INFORMATION_MESSAGE);
}
}
};
scheduler.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS);
其中 TimeUnit = 1000,但问题是它不会在指定的时间内重复出现。
您的核心池大小为 1 ( Executors.newScheduledThreadPool(1)
(,因此您一次只能执行一个线程,等待的执行将进入队列(执行程序只会在队列已满时创建新线程(,并且仅在线程再次空闲时才执行它们。
我建议更改核心池大小以匹配您需要的并行线程数,您可以从请求所需的时间推断出来,如果需要 5 秒,那么当一个线程请求在他之前启动的其他第四个线程仍在运行时(因为您的周期是一秒(,这意味着您需要 5 个线程。