volatile既然不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它保证共享数据同一时刻只能被一条线程使用,其他线程只有等到锁释放后才能重新进行竞争。对于java开发人员,我们最熟悉的肯定就是用synchronized关键词完成锁功能,在涉及到多线程并发时,对于一些变量,你应该会毫不犹豫地加上synchronized去保证变...
分类:
其他好文 时间:
2014-09-05 19:58:11
阅读次数:
204
假如两个线程同时修改数据库同一条记录,就会导致后一条记录覆盖前一条,从而引发一些问题。例如: 一个售票系统有一个余票数,客户端每调用一次出票方法,余票数就减一。情景: 总共300张票,假设两个售票点,恰好在同一时间出票,它们做的操作都是先查询余票数,然后减一。一般的sql语句: declare...
分类:
数据库 时间:
2014-09-04 14:48:59
阅读次数:
257
锁( locking )
业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算
处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中
(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机
制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓
的 “ 锁 ” ,即给我们选...
分类:
其他好文 时间:
2014-08-29 18:20:08
阅读次数:
207
乐观锁和悲观锁为什么需要锁(并发控制)?在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:l丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。l脏...
分类:
其他好文 时间:
2014-08-18 00:13:53
阅读次数:
205
锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒...
分类:
其他好文 时间:
2014-07-18 12:03:42
阅读次数:
238
在实际的多用户并发访问的生产环境里边,我们经常要尽可能的保持数据的一致性。而其中最典型的例子就是我们从表里边读取数据,检查验证后对数据进行修改,然后写回到数据库中。在读取和写入的过程中,如果在多用户并发的环境里边,其他用户已经把你要修改的数据进行了修改是非常有可能发生的情况,这样就造成了数据的不一致...
分类:
数据库 时间:
2014-07-18 10:06:03
阅读次数:
299
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。...
分类:
其他好文 时间:
2014-07-09 13:08:13
阅读次数:
138
一、数据库事务1.概念:数据库事务指把一系列数据库操作组成一个单元,要么全部取消,要么全部完成。即提交和回滚操作。2.特性:(1)原子性表示组成一个事务的多个数据库操作是一个不可分隔的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任何一个数据库操作失败..
分类:
系统相关 时间:
2014-07-02 06:39:12
阅读次数:
234
乐观锁与悲观锁文章转自网上好像是玉米田的,忘记了锁(locking)业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一...
分类:
系统相关 时间:
2014-06-24 09:42:30
阅读次数:
343
上篇文章详细讨论了hql的各种查询方法,在讨论过程中写了代码示例,hql的查询方法类似于sql,查询的方法比较简单,有sql基础的开发人员在使用hql时就会变得相当的简单。Hibernate在操作数据库的同时也提供了对数据库操作的限制方法,这种方法被称为锁机制,Hibernate提供的锁分为两种一种是乐观锁,另外一种是悲观锁。通过使用锁能够控制数据库的并发性操作...
分类:
系统相关 时间:
2014-06-14 14:14:29
阅读次数:
537