Java while loop and Threads!

2022-09-03 17:32:25

我有一个程序,可以不断轮询数据库以查找某些字段的值的变化。它在后台运行,当前使用 while(true) 和 sleep() 方法来设置间隔。我想知道这是否是一种好的做法?而且,还有什么比这更有效的实现方式呢?该程序旨在始终运行。

因此,停止程序的唯一方法是对进程 ID 发出 kill。该程序可能处于 JDBC 调用的中间。我怎样才能更优雅地终止它?我理解,最好的选择是通过使用线程将定期检查的标志来设计某种退出策略。但是,我无法想到改变此标志值的方法/条件。有什么想法吗?


答案 1

我想知道这是否是一种好的做法?

不。这不好。有时候,这就是你所拥有的一切,但它并不好。

而且,还有什么比这更有效的实现方式呢?

首先,内容如何进入数据库?

最好的改变是修复插入/更新数据库的程序,以发出进入数据库和程序的请求。JMS主题对这种事情有好处。

下一个最佳更改是向数据库添加触发器,以将每个插入/更新事件排队到队列中。队列可以输入一个 JMS 主题(或队列),供程序处理。

后备计划是轮询循环。

但是,您的轮询循环不应轻易地完成工作。它应该将消息放入队列中,以便其他一些 JDBC 进程处理。终止请求是可以放入 JMS 队列中的另一条消息。当您的程序收到终止消息时,它绝对必须与先前的JDBC请求一起完成,并且可以正常停止。

在执行上述任何操作之前,请查看 ESB 解决方案。Sun的JCAPSTIBCO已经拥有了这个。像MulesourceJitterbit这样的开源ESB可能已经构建和测试了此功能。


答案 2

这真的是一个太大的问题,无法以这种格式完全回答。帮自己一个忙,在实践中购买Java并发。在 Java 5+ 平台上没有更好的并发资源。有整整一章专门讨论这个主题。

关于在JDBC调用期间杀死进程的问题,这应该没问题。我相信中断JDBC调用存在问题(因为你不能?),但这是一个不同的问题。