java – 无限循环数据库检查

我正在使用JDBC,需要不断检查数据库以防止更改值.我目前所拥有的是无限循环运行,内部循环迭代更改的值,每次迭代检查数据库.public void runInBG() { //this method called from another threadwhile(true) {while(e...

我正在使用JDBC,需要不断检查数据库以防止更改值.

我目前所拥有的是无限循环运行,内部循环迭代更改的值,每次迭代检查数据库.

public void runInBG() { //this method called from another thread
    while(true) {
     while(els.hasElements()) {
      Test el = (Test)els.next();
       String sql = "SELECT * FROM Test WHERE id = '" + el.getId() + "'";
       Record r = db.getTestRecord(sql);//this function makes connection, executeQuery etc...and return Record object with values
       if(r != null) {
         //do something
       }
     }
    }
}

我认为这不是最好的方式.

我正在考虑的另一种方式是反过来,继续迭代数据库.

UPDATE

感谢您关于计时器的反馈,但我认为它不会解决我的问题.
一旦在数据库中发生了变化,我需要几乎立即处理结果与变化的值(示例代码中的“els”).

即使数据库没有改变,它仍然必须不断检查变化的值.

更新2

好的,对任何对答案感兴趣的人,我相信我现在有解决方案.基本上解决方案是不要使用数据库.加载,更新,添加等…仅从数据库到内存需要什么.
这样您就不必经常打开和关闭数据库,只需在对数据库进行更改时处理数据库,并将这些更改反映到内存中,并且只处理内存中的任何内容.
当然这是更多的内存密集型,但性能是绝对的关键.

至于周期性的“计时器”答案,我很抱歉,但这根本不对.没有人回应有一个理由如何使用计时器来解决这种特殊情况.

但是再次感谢您的反馈,尽管如此仍然有用.

解决方法:

另一种可能性是使用ScheduledThreadPoolExecutor.

您可以实现包含逻辑的Runnable并将其注册到ScheduledExecutorService,如下所示:

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
executor.scheduleAtFixedRate(myRunnable, 0, 5, TimeUnit.SECONDS);

上面的代码创建了一个ScheduledThreadPoolExecutor,它的池中有10个Threads,并且会注册一个Runnable,它将在5秒内立即启动.

要安排运行,您可以使用:

scheduleAtFixedRate

Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given period; that is executions will commence after initialDelay then initialDelay+period, then initialDelay + 2 * period, and so on.

scheduleWithFixedDelay

Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given delay between the termination of one execution and the commencement of the next.

here您可以看到ThreadPoolExecutor的优点,以确定它是否符合您的要求.我建议这个问题:Java Timer vs ExecutorService?也是为了做出一个好的决定.

本文标题为:java – 无限循环数据库检查

基础教程推荐