java线程的内存模型_java多线程内存模型
java多線程內(nèi)存模型:
可見(jiàn)性
要實(shí)現(xiàn)共享變量的可見(jiàn)性,必須保證兩點(diǎn):
1、線程修改后的共享變量能夠及時(shí)從工作內(nèi)存刷新到主內(nèi)存中;
2、其他線程能夠及時(shí)把共享變量的最新值從主內(nèi)存更新到自己的工作內(nèi)存中;
java語(yǔ)言層面的可見(jiàn)性實(shí)現(xiàn)方式(不包含jdk1.5后concurrent中包含的的)
* synchronized
* volatile
Synchronized實(shí)現(xiàn)可見(jiàn)性
synchronized可以實(shí)現(xiàn)互斥鎖(同步),從而保證在任何一個(gè)時(shí)刻只有一個(gè)線程在執(zhí)行鎖內(nèi)部的代碼(原子性);
synchronized能夠?qū)崿F(xiàn)
* 原子性(同步鎖)
* 內(nèi)存可見(jiàn)性
JMM關(guān)于synchronized的兩條規(guī)定
* 線程解鎖前(退出synchronized代碼塊),必須把共享變量的最新值刷新到主內(nèi)存中;
*線程加鎖前(進(jìn)入synchronized代碼塊)時(shí),將清空工作內(nèi)存中共享變量的值,從而使用共享變量時(shí)需要從主內(nèi)存中重新讀取最新的值(注意:加鎖與解鎖需要是同一把鎖)
原子性
指令重排序
內(nèi)存可見(jiàn)性
volatile無(wú)法保證原子性
主線程等待 子線程都運(yùn)行完才結(jié)束
使用while(Thread.activeCount() > 1) {
Thread.yield();
}
所有子線程都join()方式:http://blog.csdn.net/nms312/article/details/30115055
總結(jié)
以上是生活随笔為你收集整理的java线程的内存模型_java多线程内存模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java工程师有什么要求_什么是java
- 下一篇: python自动抢红包软件_快过年啦,还