悲观锁:修改数据之前先对该记录加锁,该期间别的线程无法修改该记录,等提交之后其他线程才可以获得锁,例如:数据库行锁,表锁,写锁,都是悲观锁 乐观锁:每次去获取数据不会加锁,但是更新记录的时候会判断一下当前记录是否和自己读取的是否一致,不一致重新读取,再更新,大都是通过版本号判断当前记录和自己读取的记 ...
分类:
其他好文 时间:
2017-07-05 13:35:15
阅读次数:
148
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。 1、自旋锁 2、自旋 ...
分类:
编程语言 时间:
2017-06-28 23:21:08
阅读次数:
226
1.悲观锁,每次使用的时候加锁 比如入账交易,一上来查询账户的时候就select * from account where accountid = ? for update; 2.乐观锁,不必每次使用的是时候加锁,而是比如在account表里面增加字段version,使用的时候select * fr ...
分类:
其他好文 时间:
2017-06-26 15:38:00
阅读次数:
108
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 乐观锁(Op ...
分类:
其他好文 时间:
2017-06-21 09:41:54
阅读次数:
162
一,什么是事务? 数据库事务是指由一个或多个SQL语句组成的工作单元,这个工作单元中的SQL语句相互依赖,如果有一个SQL语句执行失败,就必须撤销整个工作单元。 在并发环境中,多个事务同时访问相同的数据资源时,可能会造成各种并发问题,可通过设定数据库的事务隔离级别来避免,还可采用悲观锁和乐观锁来解决 ...
分类:
Web程序 时间:
2017-06-18 18:55:11
阅读次数:
189
一、简述: 在数据库操作中,为了效保证并发读取数据的正确性,提出的事务隔离级别。数据库事务的隔离级别4个,由低到高依次为: Read uncommitted(未授权读取、读未提交) Read committed(授权读取、读提交) Repeatable read(可重复读取) Serializabl ...
分类:
数据库 时间:
2017-06-17 16:07:56
阅读次数:
259
在java里面,synchronized关键字就是一种悲观锁,因为在加上锁之后,只有当前线程可以操作变量,其他线程只有等待。 CAS操作是一种乐观锁,它假设数据不会产生冲突,而是在提交的时候再进行版本比较。这样可以减少加锁的频率,提高程序的性能。 线程安全 众所周知,Java是多线程的。但是,Jav ...
分类:
其他好文 时间:
2017-06-13 20:37:26
阅读次数:
226
在数据库锁机制中介绍过,DBMS中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。 无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是数 ...
分类:
其他好文 时间:
2017-06-13 20:35:42
阅读次数:
177
概述:共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事... ...
分类:
数据库 时间:
2017-06-10 20:27:30
阅读次数:
222
Redis事务 1、介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。 2、事务的作用 一个队列中,一次性、顺序性、排他性的执行一系列命令。 3、事物执行五中情况 case1:正常执行 执行exec全 ...
分类:
其他好文 时间:
2017-06-09 23:47:34
阅读次数:
342