对象锁:

new一个对象,都会给这个实例创建一把锁,对象中的方法必须在实例创建后,通过调用方法获取锁,一个线程进去这个方法之前拿到对象的锁,才能调用方法,否则被阻塞,举个例子,老王有个如花似玉的女儿,小张很爱慕,但是小张必须见到老王(A a = new A();),通过老王的肯定才能和对方的女儿交往(a.lock());

如果见不到老王,就别想和老王女儿见面(获取锁才能获取共享的资源的操作权利);

小张获取了老王的认可, 和老王女儿交往了,现在小李也喜欢美女,老王说,不能脚踏两只船,等他们分手再说,小李就一直等,后来终于分手了,小李就和美女见面,开始了恋爱。(共享资源在一个线程获取到锁,另一个线下会等待)

可重入锁:

老王有两个女儿,小李都喜欢,老王肯定了小李的为人,说,和我大女儿谈,不适合分手,不用再找我,就可以跟我小女儿谈,

Lock和sync锁 :

因为老王(sync)不通人情,考察的重点比较多,想和老王女儿谈恋爱太难 了;

就通过媒婆(lock),小刘通过媒婆介绍,约了美女。过了两个月不合适,恋爱结束,媒婆直接把小刘劝走了,然后把下一个候选人小杜介绍来了。(lock 锁 有个lock 方法加锁, unlock 方法解锁,控制共享代码 的执行权)

这里,老王效率低,媒婆效率高(jdk1.6之前),后面,老王感觉女儿毕竟亲生的,又做了变通(锁优化。不要当场见面啦,打个电话也行,没房没车没存款也凑合,能陪我老头喝酒也可以

),

公平锁:

老王(非公平锁)是个俗人,追求女儿人很多,有些人排了好长时间队,但是老王说,高富帅什么的优先;导致一堆追求者生气,(sync 是个非公平锁, 锁放开,所有的线程都有获取锁的权利)

媒婆(非公平锁)不一样,每个单身狗都交钱了,客户上地,可以按照排队顺序约美女。(默认也是非公平锁,但是可以开启公平锁)

锁中断:

老王和霸道说,你既然追求我女儿了,就必须等,不能放弃,放弃就是瞧不起我,等一年等三年,也得等,谁叫你喜欢过我女儿,(sync 锁, 一个线程再进入 同步方法的时候, 拿不到锁就一直等, 一会等拿到锁, 才能往后面走)

媒婆不一一样,毕竟做生意的,说,那个妹子太难追求,你换一个吧,不收你钱,(lock 锁可以控制中断 , 如果一个线程长时间没获取锁, 可以中断)

非自旋锁:

小何爱慕美女好久,之前老王这么说,追求我女儿?我女儿条件好,等哪天她单身了,我打电话给你,虽然真单身了,但是老王喝酒忘了!小何多等了三年。(每个线程再阻塞就会等待)

自旋锁:

小何说,女神啊女神,等到你爸的电话,我估计都老了,就不断打电话骚扰老王,每天打几个,老王这边也是没办法,终于女儿说失恋了,老王马上打电话给小何说,你去谈恋爱吧,别他妈打我电话了。(自旋锁会 自旋,询问是否锁放开了,非自旋不会)

锁消除:

老谢也有个女儿,长相不敢恭维。已经30岁没人要,老谢说,我不管你了,谁要你就要,不要房不要车。(锁消除会消除安全代码的锁)

细分锁粒度:

小李和美女谈恋爱,又是看电影买花,又是天天唱歌送礼物,搞浪漫,花了一堆时间,效率极低,小唐看着着急,直接送了一步保时捷,不必要的步骤就过了,然后就和美女同居了,

偏向锁:

jdk6做的锁优化,对象头存储状态,继续举例子,小唐和美女热恋,每次来到老王家里,老王都要去开门,累的要死,后来想到个主意,安装一个机器,把小唐头像和女儿的恋爱状态存进去,如果是热恋,并且男朋友还是小唐,就自动开门,自己啥也不管(偏向锁在对象的对象头有个状态位 ,而且记录的当前获取锁的线程ID, 如果是1 并且当前线程ID, 当该线程再进入方法, 不会加锁)

轻量级锁:

女儿还是热恋状态,但是发现,男朋友不是之前考察过得小唐,老王赶紧丢下自己的事,把新男朋友拉到小仓库拷问,你老婆和你妈掉到水里你先救谁,简单问了个问题,感觉很满意,就说你们谈吧,(偏向锁升级为轻量级锁)

独占锁(排他锁):

女儿不能脚踏两只船,一次只能一个人谈。

非独占锁(共享锁):

主要针对的是读操作, 老王的女儿 虽然不能同时交往, 但是所有单身男青年都有看 美女的权利

悲观锁:

老王(sync)和媒婆 lock 都是 悲观锁,认为竞争一定会发生。女儿条件这么优秀, 管你是王思聪还是胡歌, 必须通过老王的考核。

乐观锁:

1 、mysql ,有版本号的概念,比如加个字段,获取上条记录版本号, update,如果是1 , 就成功, 是0就没更新。

2、Java atomic 包下的类, 基于 CAS,compare and swap,不用锁的,使用 volatile 关键字, 保证可见性, 也可以说, volatile 是一种轻量级的 synchronized 锁

转载于:https://www.cnblogs.com/zgghb/p/9399732.html

Java 的锁-老王女儿的爱情相关推荐

  1. 创业撸Java多年,老王准备换50万的车了

    大家好,我是锋哥,今天一个老朋友找我聊聊天,说最近几年事业稳定,准备换个50万的车. 我推荐他黑色奔驰GLC 300 这个学员比我厉害,我现在开的还是小英朗,还是手动的,哈哈!不过等过几年,也要换BB ...

  2. java 的23种设计模式 之单身狗和隔壁老王的故事

    2019独角兽企业重金招聘Python工程师标准>>> 觉得代码写的别扭了,回头翻翻java 的23种设计模式. today,额,这么晚了,困了.就弄个最简单的单例模式吧. 单例模式 ...

  3. 基于java洗浴中心管理系统_Java小白也能听懂的线程池的内部原理:老王的洗浴中心...

    餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:"经常听你说线程池,到底线程池到底是个什么原理?"我楞了一下,心里想女朋友今天是怎么了,怎么突 ...

  4. java 从入门到单身狗_java 的23种设计模式 之单身狗和隔壁老王的故事

    觉得代码写的别扭了,回头翻翻java 的23种设计模式. today,额,这么晚了,困了.就弄个最简单的单例模式吧. 单例模式:俗称单身狗 package singleton; public clas ...

  5. 老王的JAVA基础课:第4课 以hello world学习基础语法

    前言 为了这节课的学习,我们花了3篇的内容来介绍计算机基础和JAVA环境安装,现在我们来真正开始编写JAVA第一行代码! java初体验 我们以最古老的方式来体验一把java从编写到执行的过程. 在D ...

  6. OSChina 周四乱弹 ——过节上班没关系,老王他休息!

    2019独角兽企业重金招聘Python工程师标准>>> [今日歌曲] 好吧,今天我来推荐歌吧. 听了一个特别好听的歌曲, 必须给你们安利. @树和伊文:推荐歌曲< Insomn ...

  7. 老王学jsp之dom解析xml

    xml是一种数据的存储方式,标签完全由用户自定义,是一种树状的结构,必须完全匹配,比如: <?xml version="1.0" encoding="GBK&quo ...

  8. perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)

    它是默认带有现代行为的 Perl 5,将为以后更大的变化奠定基础. 来源:https://linux.cn/article-12349-1.html 作者:Brian D Foy 译者:Xingyu. ...

  9. 老王讲设计模式(三)——单例模式

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 早晨,老王来到公司,发现小蔡正对着电脑屏幕发呆,于是走到小蔡身后,发现小 ...

最新文章

  1. SAP MM 价格重估产生的差异
  2. 策略模式(Strategy)简介
  3. mysql有选择地输出数据_有条件地选择MYSQL列
  4. android 新浪微博的点赞功能实现,Android PraiseTextView实现朋友圈点赞功能
  5. openstack mariadb服务启动不了_在CentOS8或者RHEL8系统上体验MariaDB
  6. (72)信号发生器DDS方波设计 (二)(第15天)
  7. 题目1022:游船出租(结构体使用)
  8. hnu 暑期实训之挖掘机技术哪家强
  9. 目标检测——数据清洗的学习笔记
  10. 使用php让浏览器刷新
  11. java实现PDF转word,使用jacob插件
  12. Excel怎么实现表格数据行间随机打乱排序
  13. 将lrc批量转换为txt,同时删除时间标签
  14. 如何知道计算机是否支持64位,使用鲁大师怎么查看电脑CPU是否支持64位系统?...
  15. 用unity制作简单的AR,亲测有效
  16. Linux主目录文件夹英文,中文Ubuntu主目录下的文件夹改回英文
  17. 乘法/积运算和符号(点乘/内积/数量积,叉乘/向量积,矩阵乘法,Hadamard, Kronecker积,卷积)一网打尽
  18. spring boot 多模块项目打包部署
  19. 基于遗传算法在机器人路径规划中的应用研究(Matlab代码实现)
  20. 安卓语音开发之麦克风冲突问题

热门文章

  1. webdriver启动浏览器、设置profile加载插件步骤详解
  2. 虚拟机下安装UEFI+GPT+win7x64
  3. python安装途中遇到的问题和解决方法
  4. ip反查域名脚本实现
  5. 电商平台OnBuy选品技巧分享一二
  6. SINS/DR组合导航(一)
  7. 简化开发流程--UEditor富文本编辑器
  8. 四、与服务器进行数据交换
  9. 天地图添加自定义图层
  10. 浏览器首页被劫持(解决)-桔梗网