1 同一时间只能有一个线程访问它,那如果我是分别来自两个不同的实例对象可不可以同时访问??
2 如何将同步应用到数据库的回滚和数据的完整性上?
3 能说说主程序\主线程\用户线程和DAEMON线程的关系?

解决方案 »

  1.   

    1 同一时间只能有一个线程访问它,那如果我是分别来自两个不同的实例对象可不可以同时访问?
      不可以,如果两个不同的实例对象同时访问一个数据库中的同一个对象,如表的时候,就可能会 
      出现一个对象正在读数据的同时另一个对象在写数据.所以对于多线程的程序,一定要注意同 
      步.特别是对于关键敏感的数据的访问.但同步的代价就是程序的执行效率降低,如果不是敏感
      的数据可以不用同步
      2 如何将同步应用到数据库的回滚和数据的完整性上?
      措施1:用synchroized,这个关键字用于同步,可以把它加在方法的头部,也可以把它加在方法
            的语句块中。
      措施2:在操作数据库的过程中,把对敏感数据的操作放在try-catch-finall语句块中
      措施3:在对数据库进行实际操作之前,调用这个方法:setAutoCommit(false);这个方法的作
             用是关闭数据库的自动提交功能,而必须等待显式的执行commit操作
      措施4:在所有必需的数据库操作后执行commit方法,将前面所有的操作作为一个整体的事务
             一次性提交
      措施5:在catch中添加如下语句:
             statement.rollback();
             statement.setAutoCommit(true);
             第一个语句的作用是如果在前面数据库的操作中如果发生异常,则回滚所有的操作
             第二个语句的作用是设置数据库的自动提交属性为真,这样后面fianlly中关闭数据库
             连接,结果集的操作才会自动提交
    3 能说说主程序\主线程\用户线程和DAEMON线程的关系?
      程序和进程的区别:程序是静止的,进程是动态的。
      进程和线程的区别:进程是资源分配的基本单位,线程是执行的基本单位,同一进程中的所有
                        线程共享该进程的所有资源,彼此之间可以互相通讯。就好像同一家人住
                        在同一个屋子里一样,屋子就是资源。而家里面有很多人,这些人共享这
                        间屋子一样,彼此之间还可以互相交流
      主线程和用户现场的区别:每当一个main函数被执行,就会启动一个主线程,这个线程是由系
                              统启动的,用户线程是由用户启动的,比如你点击了一个按钮
                    
      

  2.   

    不好意思,上面有点错误:
     statement.rollback();
     statement.setAutoCommit(true);
    是connection.rollback();
      connection.setAutoCommit(true);