我正在使用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 – 无限循环数据库检查
基础教程推荐
- 使用BigDecimal除法后保留两位小数 2023-01-13
- Java中的接口及其应用场景解读 2023-07-14
- SpringFactoriesLoader类作用详解 2023-06-23
- java – tomcat 7 JDBC连接池 – 每个数据库的独立池? 2023-11-06
- java – Hibernate并发插入(MySQL INSERT IGNORE) 2023-11-03
- Java打印数组的三种方法整理 2023-01-18
- java调用shell脚本及注意事项说明 2023-01-18
- java词法分析器DDL递归应用详解 2023-03-06
- 关于apollo和Spring集成@Value注解通用解析 2023-06-30
- MyBatis中的ResultMap的association和collection标签详解 2023-06-10