国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

如何理解java中鎖與并發(fā)

發(fā)布時(shí)間:2021-09-27 17:50 來(lái)源:億速云 閱讀:0 作者:柒染 欄目: 開(kāi)發(fā)技術(shù)

本篇文章為大家展示了如何理解java中鎖與并發(fā),內容簡(jiǎn)明扼要并且容易理解,絕對能使你眼前一亮,通過(guò)這篇文章的詳細介紹希望你能有所收獲。

1. 對象頭和鎖

1.1 對象頭的概念

在java虛擬機的實(shí)現中,每個(gè)對象都有一個(gè)對象頭,用于保存對象的系統信息。對象頭中有一個(gè)稱(chēng)為Mark Word的部分,它是實(shí)現鎖的關(guān)鍵。在32位系統中,Mark Word 為一個(gè)32位的數據,在64位系統中,它占64位。它是一個(gè)多功能的數據區,可以存放對象的哈希值、對象年齡、鎖的指針等信息。一個(gè)對象是否占用鎖、占用哪個(gè)鎖,就記錄在這個(gè)Mark Word中。

以32位系統為例,普通對象的對象頭如下:

hash: 25 --------->| age: 4    biased_lock: 1    lock: 2

它表示Mark Word 中有25位表示對象的哈希值,4位表示對象的年齡,1位表示是否為偏向鎖,2位表示鎖的信息。

1.2 偏向鎖的對象頭

偏向鎖是jdk 1.6提出的一種鎖優(yōu)化方式。其核心思想是,如果程序沒(méi)有競爭,則取消之前已經(jīng)取得鎖的線(xiàn)程同步操作。也就是說(shuō),某一鎖被線(xiàn)程獲取后,就會(huì )進(jìn)入俯身模式,當線(xiàn)程再次請求這個(gè)鎖時(shí),無(wú)須再進(jìn)行相關(guān)的同步操作,從而節省了操作時(shí)間。如果在此期間有其他線(xiàn)程進(jìn)行了鎖請求,則鎖退出偏向模式。在jvm中,使用-XX:+UseBiasedLocking可以設置啟用偏向鎖。

對于偏向鎖的對象,它的格式如下:

[JavaThread*  | epoch | age | 1 | 01]

前23位表示持有偏向鎖的線(xiàn)程,后續2位表示偏向鎖的時(shí)間戳(epoch),4位表示對象年齡,年齡后固定為1,表示偏向鎖,最近2位為01,表示可偏向/未鎖定。

偏向鎖示例:

package jvm.chapter08;

import java.util.List;
import java.util.Vector;

/**
 * 使用一個(gè)線(xiàn)程對Vector進(jìn)行寫(xiě)入操作,由于對Vector的訪(fǎng)問(wèn)內部都用同步鎖控制,
 * 每次add()操作都會(huì )請求numberList對象的鎖。
 *
 * @author chengyan
 * @date 2019-11-17 7:41 下午
 */
public class Demo01 {
    public static List<Integer> numberList = new Vector<Integer>();

    public static void main(String[] args) throws InterruptedException {
        long begin = System.currentTimeMillis();
        int count = 0;
        int startnum = 0;
        while(count < 1000_0000) {
            numberList.add(startnum);
            startnum += 2;
            count++;
        }
        long end = System.currentTimeMillis();
        System.out.println(end - begin);
    }
}

使用參數-XX:+UseBiasedLocking -XX:BiasedLockingStartupDelay=0 -client -Xmx512m -Xms512m運行,結果如下:

227

這說(shuō)明程序用227毫秒完成所有的工作。參數-XX:BiasedLockingStartupDelay表示虛擬機在啟動(dòng)后立即使用偏向鎖。如不設置該參數,虛擬機默認會(huì )在啟動(dòng)后4秒后,才啟用偏向鎖,考慮到程序運行時(shí)間較短,故做此設置,盡早啟用偏向鎖。

若禁用偏向鎖,則只需使用如下參數啟動(dòng)程序:

-XX:-UseBiasedLocking -client -Xmx512m -Xms512m

結果如下:

363
1.3 輕量級鎖的對象頭

當對象處于輕量級鎖時(shí),其中Mark Word 如下(00表示最后2位的值):

[ptr | 00] locked

此時(shí),它指向存放在獲得鎖的線(xiàn)程棧中的該對象的真實(shí)對象頭。

1.4 重量級鎖的對象頭

當對象處于輕量級鎖時(shí),其中Mark Word 如下:

[ptr | 10] monitor

此時(shí),最后2位為10,整個(gè) Mark Word 指向 Minitor的指針。

1.5 普通對象的對象頭

當對象處理于普通的未鎖定狀態(tài)時(shí),其格式如下:

[header | 0 | 01|] unlocked

前29位表示對象的哈希值、年齡等信息。倒數第3位為0,最后兩位為01,表示未鎖定??梢园l(fā)現,最后兩位的值和偏向狀態(tài)是一樣的,此時(shí)虛擬機通過(guò)倒數第3位來(lái)區分是否為偏向鎖。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

伊人久久大香线蕉AV仙人| 精品亚洲欧美无人区乱码| 欧美成人看片黄A免费看| 在线观看电视剧| 成熟丰满熟妇XXXXX丰满| 久久婷婷综合色丁香五月|