Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > Java基础相关 >

Java高级技术指南 PDF 下载


分享到:
时间:2024-03-30 15:25来源:http://www.java1234.com 作者:转载  侵权举报
Java高级技术指南
失效链接处理
Java高级技术指南 PDF 下载
 
 
 
相关截图:
 


主要内容:

5、synchronized
Synchronized 的作用主要有三个:
(1)确保线程互斥的访问同步代码
(2)保证共享变量的修改能够及时可见
(3)有效解决重排序问题。
从语法上讲,Synchronized 总共有三种用法:
(1)修饰普通方法
(2)修饰静态方法
(3)修饰代码块
 
原理
每个对象有一个监视器锁(monitor),而同时只能有一个线程可以获得该对
象 monitor 的所有权。在线程进入时通过 monitorenter 尝试取得对象 monitor
所有权,退出时通过 monitorexit 释放对象 monitor 所有权。
 
monitorenter
线程执行 monitorenter 指令时尝试获取 monitor 的所有权,过程如下:
1、如果 monitor 的进入数为 0,则该线程进入 monitor,然后将进入数设置
为 1,该线程即为 monitor 的所有者。
2、如果线程已经占有该 monitor,只是重新进入,则进入 monitor 的进入
数加 1。
3.如果其他线程已经占用了 monitor,则该线程进入阻塞状态,直到 monitor
的进入数为 0,再重新尝试获取 monitor 的所有权。
 
monitorexit
执行 monitorexit 的线程必须是 objectref 所对应的 monitor 的所有者。
指令执行时,monitor 的进入数减 1,如果减 1 后进入数为 0,那线程退出
monitor,不再是这个 monitor 的所有者。其他被这个 monitor 阻塞的线程可以
尝试去获取这个 monitor 的所有权。
同步代码块使用了 monitorenter 和 monitorexit 指令实现。
同步方法中依靠方法修饰符上的 ACC_SYNCHRONIZED 实现。
无论哪种实现,本质上都是对指定对象相关联的 monitor 的获取,这个过程
是互斥性的,也就是说同一时刻只有一个线程能够成功,其它失败的线程会被阻
塞,并放入到同步队列中,进入 BLOCKED 状态
 

 
 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐