最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java鎖之阻塞鎖介紹和代碼實(shí)例

 更新時(shí)間:2014年09月22日 08:47:03   投稿:junjie  
這篇文章主要介紹了Java鎖之阻塞鎖介紹和代碼實(shí)例,阻塞鎖與自旋鎖不同,它改變了線程的運(yùn)行狀態(tài),需要的朋友可以參考下

鎖作為并發(fā)共享數(shù)據(jù),保證一致性的工具,在JAVA平臺(tái)有多種實(shí)現(xiàn)(如 synchronized 和 ReentrantLock等等 ) 。這些已經(jīng)寫好提供的鎖為我們開發(fā)提供了便利,但是鎖的具體性質(zhì)以及類型卻很少被提及。本系列文章將分析JAVA下常見的鎖名稱以及特性,為大家答疑解惑。

阻塞鎖

阻塞鎖,與自旋鎖不同,改變了線程的運(yùn)行狀態(tài)。
在JAVA環(huán)境中,線程Thread有如下幾個(gè)狀態(tài):

1,新建狀態(tài)

2,就緒狀態(tài)

3,運(yùn)行狀態(tài)

4,阻塞狀態(tài)

5,死亡狀態(tài)

阻塞鎖,可以說是讓線程進(jìn)入阻塞狀態(tài)進(jìn)行等待,當(dāng)獲得相應(yīng)的信號(hào)(喚醒,時(shí)間) 時(shí),才可以進(jìn)入線程的準(zhǔn)備就緒狀態(tài),準(zhǔn)備就緒狀態(tài)的所有線程,通過競(jìng)爭(zhēng),進(jìn)入運(yùn)行狀態(tài)。

JAVA中,能夠進(jìn)入\退出、阻塞狀態(tài)或包含阻塞鎖的方法有 ,synchronized 關(guān)鍵字(其中的重量鎖),ReentrantLock,Object.wait()\notify(),LockSupport.park()/unpart()(j.u.c經(jīng)常使用)

下面是一個(gè)JAVA 阻塞鎖實(shí)例:

package lock;

import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.concurrent.locks.LockSupport;

public class CLHLock1 {
  public static class CLHNode {
    private volatile Thread isLocked;
  }

  @SuppressWarnings("unused")
  private volatile CLHNode                      tail;
  private static final ThreadLocal<CLHNode>              LOCAL  = new ThreadLocal<CLHNode>();
  private static final AtomicReferenceFieldUpdater<CLHLock1, CLHNode> UPDATER = AtomicReferenceFieldUpdater.newUpdater(CLHLock1.class,
                                          CLHNode.class, "tail");

  public void lock() {
    CLHNode node = new CLHNode();
    LOCAL.set(node);
    CLHNode preNode = UPDATER.getAndSet(this, node);
    if (preNode != null) {
      preNode.isLocked = Thread.currentThread();
      LockSupport.park(this);
      preNode = null;
      LOCAL.set(node);
    }
  }

  public void unlock() {
    CLHNode node = LOCAL.get();
    if (!UPDATER.compareAndSet(this, node, null)) {
      System.out.println("unlock\t" + node.isLocked.getName());
      LockSupport.unpark(node.isLocked);
    }
    node = null;
  }
}

在這里我們使用了LockSupport.unpark()的阻塞鎖。 該例子是將CLH鎖修改而成。

阻塞鎖的優(yōu)勢(shì)在于,阻塞的線程不會(huì)占用cpu時(shí)間,不會(huì)導(dǎo)致 CPu占用率過高,但進(jìn)入時(shí)間以及恢復(fù)時(shí)間都要比自旋鎖略慢。

在競(jìng)爭(zhēng)激烈的情況下 阻塞鎖的性能要明顯高于 自旋鎖。

理想的情況則是; 在線程競(jìng)爭(zhēng)不激烈的情況下,使用自旋鎖,競(jìng)爭(zhēng)激烈的情況下使用,阻塞鎖。

(全文完)

相關(guān)文章

  • java獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法

    java獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法

    這篇文章主要給大家介紹了關(guān)于java如何獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能

    SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能

    最近有一個(gè)需求是關(guān)于視頻上傳播放的,需要設(shè)計(jì)一個(gè)方案,中間談到了Minio這個(gè)技術(shù),于是來(lái)學(xué)習(xí)一下,所以本文給大家介紹了SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • SpringBoot2開啟Actuator端點(diǎn)監(jiān)控的方法

    SpringBoot2開啟Actuator端點(diǎn)監(jiān)控的方法

    這篇文章主要介紹了SpringBoot2開啟Actuator端點(diǎn)監(jiān)控的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java中fail-fast和fail-safe的使用

    Java中fail-fast和fail-safe的使用

    fail-fast和fail-safe是兩種不同的迭代器行為,特別是在遍歷集合時(shí)遇到并發(fā)修改的情況,本文主要介紹了Java中fail-fast和fail-safe的使用,感興趣的可以了解一下
    2024-08-08
  • mybatis某些字段無(wú)法映射成功的解決

    mybatis某些字段無(wú)法映射成功的解決

    這篇文章主要介紹了mybatis某些字段無(wú)法映射成功的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-11-11
  • springboot過濾器和攔截器的實(shí)例代碼

    springboot過濾器和攔截器的實(shí)例代碼

    這篇文章主要介紹了springboot過濾器和攔截器的實(shí)例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • java生成jar包并且單進(jìn)程運(yùn)行的實(shí)例

    java生成jar包并且單進(jìn)程運(yùn)行的實(shí)例

    下面小編就為大家分享一篇java生成jar包并且單進(jìn)程運(yùn)行的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2017-12-12
  • JavaWeb實(shí)現(xiàn)簡(jiǎn)單上傳文件功能

    JavaWeb實(shí)現(xiàn)簡(jiǎn)單上傳文件功能

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)簡(jiǎn)單上傳文件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java查詢時(shí)間段(startTime--endTime)間的數(shù)據(jù)方式

    Java查詢時(shí)間段(startTime--endTime)間的數(shù)據(jù)方式

    這篇文章主要介紹了Java查詢時(shí)間段(startTime--endTime)間的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis?selectKey 如何返回新增用戶的id值

    Mybatis?selectKey 如何返回新增用戶的id值

    這篇文章主要介紹了Mybatis?selectKey 如何返回新增用戶的id值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評(píng)論

龙里县| 黄平县| 冀州市| 驻马店市| 沙雅县| 泰来县| 宁明县| 江山市| 博兴县| 博罗县| 沙坪坝区| 大新县| 兴化市| 屏边| 麻栗坡县| 革吉县| 云龙县| 东平县| 远安县| 吉木乃县| 崇信县| 济南市| 日土县| 响水县| 镇雄县| 苏尼特左旗| 湖州市| 余庆县| 大邑县| 平谷区| 绩溪县| 大关县| 贡山| 将乐县| 东方市| 镇原县| 翁牛特旗| 天门市| 通海县| 台州市| 永春县|