Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
Java高级技术指南 PDF 下载
匿名网友发布于:2024-03-30 15:25:03
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

Java高级技术指南 PDF 下载  图1

 

 

 

资料内容:

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 状态