繁体   English   中英

多个线程如何通过使用Java中的同一连接来写入数据库?

[英]How can multiple Threads write to the database by using the same connection in java?

我有一个创建多个线程的程序,我需要其中任何一个都可以写入数据库。 问题是,如果我使用相同的连接,则由于多个线程访问相同的变量(如statment.setString()),导致数据不正确。 如果我使用不同的连接,它将从线程中受益。 总结:我需要所有线程都将访问一个类或另一个拥有1个连接并拥有一批查询的线程,并且不时地执行一批批处理。 谢谢!

我认为这样做没有任何意义,但是如果您仍然想这样做,那么建议您通过此连接同步对数据库的访问。 添加一些常见的LOCK对象,并执行以下操作:

synchronized(LOCK){
    // use connection by current thread including
    // sensitive operations which
    // need this synchronization
}

但是请注意,即使您正在使用多个线程,它们也会彼此等待,即它们通过此连接对DB的访问将被序列化(而不是同时进行)。

您所描述的情况(许多线程正在访问数据库)正是Web应用程序中当前的情况。 推荐的做法是设置一个连接池,以减轻单个连接的争用和每个线程一个连接的资源消耗。 Apache DBCP是这种连接池的一个示例。

如果您无法初始化多个连接,请在您的连接类中添加一个名为bound的布尔标志,单个线程不能使用连接“ if(bound)” ...使用该连接的任何线程都应在清除该标志时完成...在每个线程中添加while循环以检查该标志,直到它变为false,然后将其设置为true并开始使用它...相当容易...您还可以为所有接受网络的com创建第4个专用同步线程从队列中的其他线程执行任务并同步执行它们,因此不会混乱...无论如何,有大约一百万种方法,选择更适合您的应用程序的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM