在做一个程序,executorService动态产生多个Runnable线程
每个线程都有可能执行Sqlserver写入操作,现在sqlserver只有一个连接
也就是多个线程公用一个sqlserver连接
这种情况下线程在对sqlserver写入的时候需要先lock,等执行完后再unlock吗?请各位高手指教,谢谢

解决方案 »

  1.   

    不需要,JDBC的Connection对象本身是线程安全的,在多线程执行任务的时候会将任务放在执行队列里,按照入队顺序执行,不会发生冲突
      

  2.   

    非常感谢!!!
    刚接触java,好多都不懂
    如果问了些很傻的问题请谅解啊嗯嗯,现在放心了,嘿嘿
      

  3.   

    数据库自己也有锁,你的锁保证变量的访问,数据库的锁保证表,Row等的访问。
      

  4.   

    大哥再问一个问题刚查到这个一个资料:通过 Microsoft SQL Server 2005 JDBC Driver SQLServerConnection 对象进行的通信是同步的,因此可安全地执行在多个线程中共享一个连接的语句。Statement 和 SQLServerResultSet 类不是线程安全的。所有与 SQL Server Database Engine 的通信都在连接级别同步。在 JDBC 中,事务控制(例如提交和回滚)是在连接级别实现的。因此,如果多线程需要独立的事务控制,则它们必须分别创建和操作自己的连接。这个意思是不是Statement并非线程安全,就是说创建对象如果是在线程内创建的话就没什么问题,但是在线程外创建的Statement对象在线程内使用就会出问题?
      

  5.   

    这个是我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 ......");
    这样多个线程同时写数据库的时候会不会有问题?