国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java并發(fā)編程學(xué)習(xí)之再談公平鎖和非公平鎖

warkiz / 1344人閱讀

摘要:在并發(fā)編程學(xué)習(xí)之顯示鎖里有提過公平鎖和非公平鎖,我們知道他的使用方式,以及非公平鎖的性能較高,在源碼分析的基礎(chǔ)上,我們看看和的區(qū)別在什么地方。而非公平鎖直接嘗試獲取鎖。

在java并發(fā)編程學(xué)習(xí)之顯示鎖Lock里有提過公平鎖和非公平鎖,我們知道他的使用方式,以及非公平鎖的性能較高,在AQS源碼分析的基礎(chǔ)上,我們看看NonfairSync和FairSync的區(qū)別在什么地方。

lock方法
//非公平鎖NonfairSync
final void lock() {
    if (compareAndSetState(0, 1))
        setExclusiveOwnerThread(Thread.currentThread());
    else
        acquire(1);
}
//公平鎖FairSync
final void lock() {
    acquire(1);
}

從源碼可以看出,獲取鎖的時候,非公平鎖會先嘗試獲取,獲取不到再調(diào)用acquire方法,而公平鎖直接調(diào)用acquire方法。

tryAcquire方法
////非公平鎖NonfairSync
protected final boolean tryAcquire(int acquires) {
    return nonfairTryAcquire(acquires);
}
final boolean nonfairTryAcquire(int acquires) {
    final Thread current = Thread.currentThread();
    int c = getState();
    if (c == 0) {
        if (compareAndSetState(0, acquires)) {
            setExclusiveOwnerThread(current);
            return true;
        }
    }
    else if (current == getExclusiveOwnerThread()) {
        int nextc = c + acquires;
        if (nextc < 0) // overflow
            throw new Error("Maximum lock count exceeded");
        setState(nextc);
        return true;
    }
    return false;
}
////公平鎖FairSync
protected final boolean tryAcquire(int acquires) {
    final Thread current = Thread.currentThread();
    int c = getState();//無線程占用
    if (c == 0) {
        if (!hasQueuedPredecessors() &&//看是否有前面節(jié)點在等待
            compareAndSetState(0, acquires)) {
            setExclusiveOwnerThread(current);
            return true;
        }
    }
    else if (current == getExclusiveOwnerThread()) {
        int nextc = c + acquires;
        if (nextc < 0)
            throw new Error("Maximum lock count exceeded");
        setState(nextc);
        return true;
    }
    return false;
}

從源碼可以看出,公平鎖再嘗試獲取鎖的時候,先判斷隊列是否有其他節(jié)點在等待,沒有再獲取。而非公平鎖直接嘗試獲取鎖。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77909.html

相關(guān)文章

  • java并發(fā)編程學(xué)習(xí)之顯示Lock

    摘要:顯示鎖和內(nèi)置鎖內(nèi)置鎖優(yōu)勢代碼簡潔不會因為沒釋放鎖,導(dǎo)致鎖泄露。顯示鎖優(yōu)勢靈活性強,鎖的獲取可以被中斷,可以嘗試獲取鎖。接口接口主要方法如下獲取鎖嘗試獲取鎖,表示未加鎖的情況。會進行搶鎖操作,如果獲取不到鎖,也會進入阻塞隊列等到喚醒。 顯示鎖和內(nèi)置鎖 內(nèi)置鎖(Synchronized)優(yōu)勢 代碼簡潔 不會因為沒釋放鎖,導(dǎo)致鎖泄露。 顯示鎖(Lock)優(yōu)勢 靈活性強,鎖的獲取可以被中...

    zone 評論0 收藏0
  • Java并發(fā)編程,深入理解ReentrantLock

    摘要:公平鎖為了保證時間上的絕對順序,需要頻繁的上下文切換,而非公平鎖會降低一定的上下文切換,降低性能開銷。因此,默認(rèn)選擇的是非公平鎖,則是為了減少一部分上下文切換,保證了系統(tǒng)更大的吞吐量。ReentrantLock簡介ReentrantLock重入鎖,是實現(xiàn)Lock接口的一個類,也是在實際編程中使用頻率很高的一個鎖, 支持重入性,表示能夠?qū)蚕碣Y源能夠重復(fù)加鎖,即當(dāng)前線程獲取該鎖再次獲取不會被阻...

    番茄西紅柿 評論0 收藏0
  • Java并發(fā)編程,深入理解ReentrantLock

    摘要:公平鎖為了保證時間上的絕對順序,需要頻繁的上下文切換,而非公平鎖會降低一定的上下文切換,降低性能開銷。因此,默認(rèn)選擇的是非公平鎖,則是為了減少一部分上下文切換,保證了系統(tǒng)更大的吞吐量。ReentrantLock簡介ReentrantLock重入鎖,是實現(xiàn)Lock接口的一個類,也是在實際編程中使用頻率很高的一個鎖, 支持重入性,表示能夠?qū)蚕碣Y源能夠重復(fù)加鎖,即當(dāng)前線程獲取該鎖再次獲取不會被阻...

    番茄西紅柿 評論0 收藏0
  • Java并發(fā)編程,深入理解ReentrantLock

    摘要:公平鎖為了保證時間上的絕對順序,需要頻繁的上下文切換,而非公平鎖會降低一定的上下文切換,降低性能開銷。因此,默認(rèn)選擇的是非公平鎖,則是為了減少一部分上下文切換,保證了系統(tǒng)更大的吞吐量。ReentrantLock簡介ReentrantLock重入鎖,是實現(xiàn)Lock接口的一個類,也是在實際編程中使用頻率很高的一個鎖, 支持重入性,表示能夠?qū)蚕碣Y源能夠重復(fù)加鎖,即當(dāng)前線程獲取該鎖再次獲取不會被阻...

    fredshare 評論0 收藏0
  • Java 重入 ReentrantLock 原理分析

    摘要:的主要功能和關(guān)鍵字一致,均是用于多線程的同步。而僅支持通過查詢當(dāng)前線程是否持有鎖。由于和使用的是同一把可重入鎖,所以線程可以進入方法,并再次獲得鎖,而不會被阻塞住。公平與非公平公平與非公平指的是線程獲取鎖的方式。 1.簡介 可重入鎖ReentrantLock自 JDK 1.5 被引入,功能上與synchronized關(guān)鍵字類似。所謂的可重入是指,線程可對同一把鎖進行重復(fù)加鎖,而不會被阻...

    lx1036 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<