在一般性開發中,筆者經常看到很多同學在對待java并發開發模型中只會使用一些基礎的方法。比如Volatile,synchronized。像Lock和atomic這類高級并發包很多人并不經常使用。我想大部分原因都是來之于對原理的不屬性導致的。在繁忙的開發工作中,又有誰會很準確的把握和使用正確的并發模型呢?
所以最近基于這個思想,本人打算把并發控制機制這部分整理成一篇文章。既是對自己掌握知識的一個回憶,也是希望這篇講到的類容能幫助到大部分開發者。
并行程序開發不可避免地要涉及多線程、多任務的協作和數據共享等問題。在JDK中,提供了多種途徑實現多線程間的并發控制。比如常用的:內部鎖、重入鎖、讀寫鎖和信號量。
Java內存模型
在java中,每一個線程有一塊工作內存區,其中存放著被所有線程共享的主內存中的變量的值的拷貝。當線程執行時,它在自己的工作內存中操作這些變量。
為了存取一個共享的變量,一個線程通常先獲取鎖定并且清除它的工作內存區,這保證該共享變量從所有線程的共享內存區正確地裝入到線程的工作內存區,當線程解鎖時保證該工作內存區中變量的值協會到共享內存中。
當一個線程使用某一個變量時,不論程序是否正確地使用線程同步操作,它獲取的值一定是由它本身或者其他線程存儲到變量中的值。例如,如果兩個線程把不同的值或者對象引用存儲到同一個共享變量中,那么該變量的值要么是這個線程的,要么是那個線程的,共享變量的值不會是由兩個線程的引用值組合而成。
一個變量時Java程序可以存取的一個地址,它不僅包括基本類型變量、引用類型變量,而且還包括數組類型變量。保存在主內存區的變量可以被所有線程共享,但是一個線程存取另一個線程的參數或者局部變量時不可能的,所以開發人員不必擔心局部變量的線程安全問題。
volatile變量 主站蜘蛛池模板: 衡水市| 驻马店市| 诸暨市| 石台县| 昌乐县| 永年县| 体育| 固始县| 辛集市| 吴川市| 堆龙德庆县| 聂拉木县| 安义县| 西华县| 抚松县| 长宁区| 蕉岭县| 砚山县| 中江县| 八宿县| 乐平市| 盈江县| 界首市| 盐边县| 溆浦县| 河西区| 白山市| 乌兰浩特市| 买车| 迭部县| 温宿县| 安康市| 玛纳斯县| 永修县| 贵定县| 行唐县| 行唐县| 阿尔山市| 札达县| 华池县| 滁州市|