java 锁的分类
java中为了解决多线程并发带来的线程安全问题,引入了锁机制。
一、公平锁和非公平锁
1、公平锁:按照申请锁的顺序(FIFO队列)来获取锁。
2、非公平锁:所有线程都会竞争,获取的锁的顺序和申请顺序无关。
ReentrantLock failReentrantLock = new ReentrantLock(true); //公平锁 ReentrantLock unFairReentrantLock = new ReentrantLock(); // 非公平锁
二、共享锁和独占锁
1、共享锁:又称读锁,支持多个线程同时获取锁,可以读数据,无法更新。
2、独占锁:又称写锁,一次只能由一个线程访问。可以更新数据。
ReadWriteLock readWriteLock = new ReadWriteLock() {
@Override
public Lock readLock() {
return null;
} @Override
public Lock writeLock() {
return null;
}
};
三、乐观锁和悲观锁
1、乐观锁:每次获取数据不认为会有其他线程修改数据,乐观的认为不会产生并发问题。因此在读数据时候不会加锁,但在更新时候会check其他线程有没有对数据进行过修改。
check方式一般有两种:(1)版本号机制 (2)cas操作
对于版本号机制,会为数据加上一个版本号字段(version),每更新一次数据,version+1。如果线程要更新数据值,会读取数据和对应version。提交更新时,
如果version和数据在数据库中version 一致则更新,否则重试。 sql:
update table set x=x+1, version=version+1 where id=#{id} and version=#{version};
对于cas操作:即compare and set,涉及三个操作数,数据所在的内存值,预期值,新值。如果更新数据,会check内存值和之前取到的值是否相等,如果相等用新值更新,否则
自旋,即不断重试。
2、悲观锁:每次获取数据认为会有其他线程修改数据,悲观的认为一定会产生并发问题。因此每次获取数据之前都会加锁。比如java中 synchronized。
java 锁的分类的更多相关文章
- 详解Java锁的升级与对比(1)——锁的分类与细节(结合部分源码)
前言 之前只是对Java各种锁都有所认识,但没有一个统一的整理及总结,且没有对"锁升级"这一概念的加深理解,今天趁着周末好好整理下之前记过的笔记,并归纳为此博文,主要参考资源为&l ...
- Java锁-Synchronized深层剖析
Java锁-Synchronized深层剖析 前言 Java锁的问题,可以说是每个JavaCoder绕不开的一道坎.如果只是粗浅地了解Synchronized等锁的简单应用,那么就没什么谈的了,也不建 ...
- java 并发多线程 锁的分类概念介绍 多线程下篇(二)
接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...
- Java中的锁——锁的分类
Java中有各种各样的锁,例如公平锁.乐观锁等等,这篇文章主要介绍一下各种锁的分类. 按照其性质分类 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并 ...
- Java中15种锁的分类综合总结
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- java 锁4
关于锁的分类 及 锁的灵活使用: 参见 http://blog.csdn.net/qaz13177_58_/article/details/21543515 有几句话说得相当不错: 锁的分类 : 同 ...
- JAVA锁有哪些种类,以及区别(转)
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级 ...
- 最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁
在Java并发场景中,会涉及到各种各样的锁如公平锁,乐观锁,悲观锁等等,这篇文章介绍各种锁的分类: 公平锁/非公平锁 可重入锁 独享锁/共享锁 乐观锁/悲观锁 分段锁 自旋锁 01.乐观锁 vs 悲观 ...
- 锁(1)-- java锁
前言: 锁分3种:java锁.分布式锁.DB锁 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁 ...
随机推荐
- java第一次实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程名称:java实验 班级:1352 姓名:潘恒 学号:20135209 成绩: ...
- 《Spring2之站立会议9》
<Spring2之站立会议9> 昨天,添加了注册界面: 今天,添加了表情库: 遇到的问题:由于资源有限,感觉设计的不完美并且途中也遇到了好多问题.
- 《Spring2之站立会议2》
<Spring2之站立会议2> 昨天,模仿着资料把客户端和服务器端的代码写了一下: 今天,继续找本机的端口号和逐步深入理解代码含义: 遇到的问题,在理解时,对一些知识理解还是比较朦胧,一知 ...
- DataTime日期格式化
C# DateTime日期格式化 在C#中DateTime是一个包含日期.时间的类型,此类型通过ToString()转换为字符串时,可根据传入给Tostring()的参数转换为多种字符串格式. 目录 ...
- BeanCreationException报错启动不起来(jar包冲突)
一月 23, 2015 3:46:13 下午 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache T ...
- C51学习笔记
转自:http://blog.csdn.net/gongyuan073/article/details/7856878 单片机C51学习笔记 一, C51内存结构深度剖析 二, reg51.头 ...
- toast components
toast components https://jossmac.github.io/react-toast-notifications/ https://docs.microsoft.com/en- ...
- bing 搜索引擎 无法访问 bug
bing 搜索引擎 无法访问 bug 自从 Google 不好正常使用以后, 一直在使用 bing, 今天突然就 无法访问了,怎么回事?被黑了? ... loading https://cn.bing ...
- Html5 web 本地存储 (localStorage、sessionStorage)
HTML5 提供了两种在客户端存储数据的新方法localStorage,sessionStorage sessionStorage(临时存储) :为每一个数据源维持一个存储区域,在浏览器打开期间存在, ...
- 【转载】css3动画简介以及动画库animate.css的使用
原文地址:http://www.cnblogs.com/2050/p/3409129.html 在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好. ...