我正在一个基于 Java 的服务器上工作,其中我将有多个线程(每个连接的用户一个线程 + 一些额外的线程)。将涉及一些数据库连接,所以我在想每次服务器对数据库进行SELECT查询时,它都会为此启动一个新线程,以防止当前线程阻塞。我打算为此使用连接池,我想我知道该怎么做。(我已经研究过C3P0)但是,也会涉及很多UPDATE语句,但是直接运行这些语句并不重要,这里有延迟也没关系。而且由于可能有很多UPDATE语句,我正在考虑为所有UPDATE设置一个工作线程陈述。正如我所看到的,这将具有能够重用PreparedStatement
-objects的优势
问题: 我怎样才能从其他线程告诉UPDATE -worker 线程运行一些语句?我知道多线程以及如何使用同步块使线程相互“对话”,但是涉及到数据库时,它突然感觉更复杂了。我读过准备好的语句和连接不应该在线程之间共享。
我现在关于如何解决它的想法:(感觉不是一个好的解决方案)
使用LinkedBlockingQueue
自定义类的(或另一种队列),其中包含有关调用哪种 UPDATE 语句以及发送它的参数的信息。然后工作线程将在收到通知时从该队列中读取(当将某些内容添加到队列时)并在那里运行适当的方法,该方法将使用适当的准备好的语句,设置参数并调用它。
编辑:我认为自己使用这种方法的一个不好的想法是参数可能是整数、字符串、双精度或其他。如何将它们存储在自定义类中?将它们全部存储为字符串感觉不好。
我在正确的轨道上还是有更好的方法来解决这个问题?