标准MySQL JDBC驱动程序是否是线程安全的?具体来说,我想在所有线程中使用单个连接,但每个语句只能在单个线程中使用。是否存在某些安全的情况,而其他情况则不然?你在这里有什么经历?
答案 0 :(得分:10)
每个连接启动/提交事务。除非你正在做一些非常具体的事情(我真的不能想到一个可以说是诚实的例子),你最好使用连接池和每个线程的连接。
答案 1 :(得分:4)
如果autocommit = 1,那么让多个线程共享同一连接是非常可行的,前提是同步访问连接。如果autocommit = 0,则必须通过某种互斥锁控制对连接的访问,直到提交发生。
除非您的应用程序可以拥有的连接数量完全受限,否则连接池可能是更可行的替代方案。
答案 2 :(得分:0)
根据我最近的经验,{/ 1}}对象在Connector / J 5.1.33中不是线程安全的。
我遇到bug 67760中描述的死锁情况。不确定它是否是一个错误,但讨论中的一个合理建议是:
[2012年12月12日20:33] Todd Farmer
请不要在多个线程中使用单个Connection对象 没有适当的同步。连接器/ J - 更重要的是, MySQL客户端 - 服务器协议 - 不允许并发 使用相同Connection对象的操作。如果是Connection对象 必须跨线程共享,这是责任 应用程序代码作者,以确保操作正确序列化。