在做一个程序,executorService动态产生多个Runnable线程
每个线程都有可能执行Sqlserver写入操作,现在sqlserver只有一个连接
也就是多个线程公用一个sqlserver连接
这种情况下线程在对sqlserver写入的时候需要先lock,等执行完后再unlock吗?
请各位高手指教,谢谢
------最佳解决方案--------------------------------------------------------
不需要,JDBC的Connection对象本身是线程安全的,在多线程执行任务的时候会将任务放在执行队列里,按照入队顺序执行,不会发生冲突
------其他解决方案--------------------------------------------------------
非常感谢!!!
刚接触java,好多都不懂
如果问了些很傻的问题请谅解啊
嗯嗯,现在放心了,嘿嘿
------其他解决方案--------------------------------------------------------
自信点,你问的这个问题新手肯定问不出来,坚持学习下去,一定会有收获的
------其他解决方案--------------------------------------------------------
记得结贴哦!
------其他解决方案--------------------------------------------------------
数据库自己也有锁,你的锁保证变量的访问,数据库的锁保证表,Row等的访问。
------其他解决方案--------------------------------------------------------
大哥再问一个问题
刚查到这个一个资料:
通过 Microsoft SQL Server 2005 JDBC Driver SQLServerConnection 对象进行的通信是同步的,因此可安全地执行在多个线程中共享一个连接的语句。Statement 和 SQLServerResultSet 类不是线程安全的。所有与 SQL Server Database Engine 的通信都在连接级别同步。在 JDBC 中,事务控制(例如提交和回滚)是在连接级别实现的。因此,如果多线程需要独立的事务控制,则它们必须分别创建和操作自己的连接。
这个意思是不是Statement并非线程安全,就是说创建对象如果是在线程内创建的话就没什么问题,但是在线程外创建的Statement对象在线程内使用就会出问题?
------其他解决方案--------------------------------------------------------
这个是我SqlServer类里的一个查询方法
public static ResultSet execute(String sql) {
try {
Statement sqlStatement=dbConn.createStatement(); //创建Statement对象
ResultSet rs=sqlStatement.executeQuery(sql);
return true;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
在线程里我直接这样用
MainClass.SqlServer.executeQuery("insert ......");
这样多个线程同时写数据库的时候会不会有问题?