1:JMM其實是java虛擬機棧的一部分
2:主內存和工作內存:都屬于Java虛擬機內存
主內存:主要對應于JVM內存區域中的堆內存中的對象實例數據部分
工作內存:主要對應于JVM內存區域中的虛擬機棧中的部分區域
主內存與工作內存的數據交換操作的過程(通過總線bus通信,涉及總線嗅探機制及緩存一致性知識、MESI通信協議):
涉及八個原子操作:lock(鎖定), unlock(解鎖), read(讀取), load(加載), use(使用), assign(賦值), store(存儲), write(寫入)
3:volatile 修飾的變量的特殊性
volatile 是虛擬機提供的最輕量級的同步機制;
被volatile修飾的變量將具備以下兩種特性:
1)可見性:一個變量修改了這個變量的值時,所有共享此變量的線程都會立即知道
2)禁止指令重排序優化(機器級別語言-匯編):內存屏障概念
注:final修飾的字段在構造器種初始化成功后,對其他線程也可見
4:java 內存模型的特征:
1)原子性:某些操作是原子的
2)可見性:一個變量修改了這個變量的值時,所有共享此變量的線程都會立即知道
3)有序性:先行發生原則提供部分保障--操作A在B之前發生,則A產生的影響能被B觀察到,影響包括修改了內存中共享變量的值、發送消息、調用方法等
Java內存模型提供了8種默認的先行發生關系:
1:程序次序規則? 2:管程鎖定規則? 3:volatile變量規則? 4:線程啟動規則? 5:線程終止規則? 6:線程終端規則? 7:對象終結規則 8:傳遞性
5:java線程安全實現方法:
1)互斥同步:互斥是方法,同步是目的--例如synchronized 和JUC并發包下的ReentrantLock?[ri?‘entr?nt]?(重入鎖)
ReentrantLock:等待可中斷、可實現公平鎖、以及鎖可以綁定多個條件,JDK1.6以后他們的性能基本一樣,更傾向于用synchronized實現。
2)非阻塞同步:樂觀的并發策略--CAS操作(JDK1.5之后的包sun.misc.Unsafe類,啟動類加載器(Bootstrap ClassLoader)加載的Class才能訪問它;ABA問題)
3)無同步方案:不涉及數據共享的代碼天生就是線程安全的--可重入代碼和線程本地存儲(java.lang.ThreadLocal類)
6:多線程鎖優化
1)自旋鎖與自適應鎖? ?2)消除鎖? 3)粗化鎖? ?4)輕量級鎖? ? ?5)偏向鎖
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态