我有一个创建多个线程的程序,我需要其中任何一个都写入数据库。问题是,如果我使用相同的连接,由于多个线程访问相同的变量(如statment.setString()),数据是不正确的。 如果我使用不同的连接,它会从线程中获得所有好处。 总结:我需要所有线程都将访问一个类或另一个将保持1个连接并将持有一批查询的线程,并且偶尔将执行批处理。 谢谢!
答案 0 :(得分:1)
我认为这样做没有意义但是如果你想要这样做,那么我建议你通过这个连接同步对数据库的访问。添加一些常见的LOCK对象并执行以下操作:
synchronized(LOCK){
// use connection by current thread including
// sensitive operations which
// need this synchronization
}
但请注意,即使您使用多个线程,它们也会相互等待,即通过此连接访问数据库将被序列化(不是同步)。
答案 1 :(得分:0)
您正在描述的情况(访问数据库的许多线程)正是Web应用程序中的当前情况。建议的做法是设置一个连接池,以缓解单个连接引起的争用和每个线程一个连接的资源消耗。 Apache DBCP就是这种连接池的一个例子。
答案 2 :(得分:-1)
如果你不能初始化多个连接,在你的连接类中添加一个名为bound的布尔标志,单个线程不能使用连接“if(bound)”...使用连接的任何线程都应该清除完成后的标志...在每个线程中添加while循环以检查标志,直到它变为false,然后将其设置为true并开始使用它......非常简单...你也可以为所有网络创建第4个专用同步线程com接受来自队列中其他线程的任务并同步执行它们以免造成任何混乱......无论如何,有一百万种方法,选择哪种更适合您的应用程序