处理一个不会在 Java 中停止 runnable() 的方法



我想要一个每秒检查数据库中是否有更新的方法,如果该方法发现数据库中有更改,它将调用另一个方法来执行所需的操作。

面临的问题是,我想要一个每秒不断重复的方法,即使它调用另一个方法来执行操作块。

我该怎么做?

我已经使用了这段代码

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 个线程。

最新更新