写点什么

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

用户头像
极客good
关注
发布于: 刚刚

[](

)官方解释


同步方法支持一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成的。

[](

)通俗易懂的解释


能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。


[](


)地位




  • Synchronized 是 Java 的关键字,被 Java 语言原生支持


代码演示:不使用并发手段的后果演示


代码实战:两个线程同时 a++,最后结果会比预计的少



原因


count++,它看上去只是一个操作,实际上包含了三个动作:


  1. 读取 count

  2. 将 count 加 1

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


  • 最基本的互斥同步手段

  • 并发编程中的元老级角色,是并发编程的必学内容


[](


)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. 两个线程访问


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


的是 synchronized 的静态方法


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

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

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

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

[](

)情况一:


[](

)情况二:


[](

)情况三:

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

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