test1里面s.lock(act, LockMode.UPGRADE);锁住后,test2就一直\等待,等test1释放锁后才继续执行的
s.lock(act, LockMode.UPGRADE_NOWAIT);test2就不等待直接抛出异常了楼猪哪个校区的?

解决方案 »

  1.   

    test1中加了session.lock(act,LockMode.UPGRADE)并没有效。 
    test2中加test1中加了session.lock(act,LockMode.UPGRADE)也没有任何影响。但是修改成:LockMode.UPGRADE_NOWAIT后,就会报错:不能锁NOWAIT 
    而我的本意是想在test1操作期间不允许其他代码进行操作。现在仍然不知道如何加锁。 
    按我的理解,应该是在test1中的加锁才对呀。现在怎么要在test2中加锁才会有效?不明白了。 
      

  2.   

    如果Qurey.setLockMode("Account",LockMode.UPGRADE);
    会有一定的效果.
    当test1加锁,test2不加锁,最后的结果为只执行了test2的效果.
    test1,test2都加了锁,最后的结果是取一1000,存一1000.结果不变;
    test1不加锁,test2加锁.最后的结果为执行test1结果.为什么test1加上了锁(UPGFADE),test2还能访问?锁只能锁事务提交的顺序,并不能锁数据(不让其他进程访问该数据).因为有其他数据访问这个数据,就会出现并发的问题.假如能把数据锁住,就不需要在其他进程中加锁了.
    现在我都不理解锁的机制了.