写点什么

一文看透 Java 高并发:Synchronized 锁的性质、原理及其缺陷

用户头像
极客good
关注
发布于: 刚刚
  • 并发编程中的元老级角色,是并发编程的必学内容


Synchronized 的两个用法



对象锁

包括方法锁(默认锁对象为 this 当前实例对象)和同步代码块锁(自己指定锁对象)


**代码块形式:**手动指定锁对象




**方法锁形式:**synchronized 修饰普通方法,锁对象默认为 this


类锁

概念(重要):Java 类可能有很多个对象,但只有 1 个 Class 对象


本质:所以所谓的类锁,不过是 Class 对象的锁而已


用法和效果:类锁只能在同一时刻被一个对象拥有


形式 1:synchronized 加载 static 方法上



形式 2:synchronized(*.class)代码块



消失的请求解决方案


============================================================================


不使用并发手段会有什么后果?如何解决?




解决问题




两个线程同时 a++,最后结果会比预计的少


原因




count++,它看上去知识一个操作,实际上包含了三个动作


  1. 读取 count

  2. 将 count+1

  3. 将 count 的值写入到内存中

方法一

方法二

方法三


七种常见情况之 123#


===============================================================================================================================================


多线程访问同步方法的 7 种情况#




  1. 两个线程同时访问一个对象的同步方法

  2. 两个线程访问的是两个对象的同步方法

  3. 两个线程访问的是 synchronized 的静态方法

  4. 同时访问同步方法与非同步方法

  5. 访问同一个对象的不同的普通同步方法

  6. 同时访问静态 synchronized 和非静态 synchronized 方法

  7. 方法抛异常后,会释放锁

情况一:

情况二:

情况三:

情况四:


情况五:


情况六:


情况七:

[



](https://img2018.cnblog


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


s.com/i-beta/1504448/201911/1504448-20191107085430964-575840905.png)


7 种情况总结


=========================================================================

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
一文看透Java高并发:Synchronized锁的性质、原理及其缺陷