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

Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例

 更新時(shí)間:2023年10月13日 10:24:14   作者:碼農(nóng)回憶錄  
這篇文章主要介紹了Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例,Java自旋鎖是一種線程同步機(jī)制,它允許線程在獲取鎖時(shí)不立即阻塞,而是通過循環(huán)不斷嘗試獲取鎖,直到成功獲取為止,自旋鎖適用于鎖競(jìng)爭(zhēng)激烈但持有鎖的時(shí)間很短的情況,需要的朋友可以參考下

自旋鎖

1.空輪詢實(shí)現(xiàn)

  • 此處主要利用while空輪詢以及原子包的CAS
package com.gy.spinlock;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 利用空輪詢實(shí)現(xiàn)
 */
public class SpinLock01 {
    private AtomicInteger state = new AtomicInteger(0);
    public void lock() {
        while (!state.compareAndSet(0, 1)){
        }
    }
    public void unLock() {
        state.compareAndSet(1, 0);
    }
}

2. sleep提升性能

  • 第一種實(shí)現(xiàn)問題比較明顯,當(dāng)我們的線程沒有獲得鎖之前都是空輪詢,此時(shí)我們可以讓沒有獲取鎖的線程停止
package com.gy.spinlock;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 利用空輪詢實(shí)現(xiàn)
 */
public class SpinLock01 {
    private AtomicInteger state = new AtomicInteger(0);
    public void lock() {
        while (!state.compareAndSet(0, 1)){
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public void unLock() {
        state.compareAndSet(1, 0);
    }
}

3. Unsafe提升性能

  • 第二種方式雖然能讓程序暫停但是sleep的時(shí)間是不好控制的,那么這里有沒有一種方式可以直接讓程序停止知道unlock的時(shí)候才被喚醒
  • park方法和unPark方法就能實(shí)現(xiàn)這樣的功能
  • 此處unLock處不一定就是unPark的線程獲得鎖
  • 此處加鎖解鎖是否同一線程并未處理,處理方式只需要記錄加鎖線程解鎖時(shí)判斷即可
package com.gy.spinlock;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
/**
 * 利用空輪詢實(shí)現(xiàn)
 */
public class SpinLock01 {
    private AtomicInteger state = new AtomicInteger(0);
    private Queue<Thread> queue = new LinkedList();
    public void lock() {
        while (!state.compareAndSet(0, 1)){
            queue.add(Thread.currentThread());
            LockSupport.park();
        }
    }
    public void unLock() {
        state.compareAndSet(1, 0);
        LockSupport.unpark(queue.poll());
    }
}

到此這篇關(guān)于Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例的文章就介紹到這了,更多相關(guān)Java自定義自旋鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud中FeignClient自定義配置

    SpringCloud中FeignClient自定義配置

    使用FeignClient時(shí)需了解其默認(rèn)配置機(jī)制,通過注入Decoder、Encoder等Bean實(shí)現(xiàn)自定義配置,下面就來介紹一下如何使用,感興趣的可以了解一下
    2025-08-08
  • 從前端視角零搭建并啟動(dòng)若依后端及環(huán)境配置

    從前端視角零搭建并啟動(dòng)若依后端及環(huán)境配置

    若依是一個(gè)適用于企業(yè)級(jí)應(yīng)用的后臺(tái)框架,提供系統(tǒng)管理、日志管理和系統(tǒng)監(jiān)控等功能,這篇文章主要給大家介紹了如何從前端視角零搭建并啟動(dòng)若依后端及環(huán)境配置的相關(guān)資料,需要的朋友可以參考下
    2026-05-05
  • Java中旋轉(zhuǎn)PDF頁面的三種實(shí)現(xiàn)方法指南

    Java中旋轉(zhuǎn)PDF頁面的三種實(shí)現(xiàn)方法指南

    在處理 PDF 文件時(shí),我們常會(huì)遇到頁面方向不正確的問題,在 Java 中,我們可以通過程序化方式旋轉(zhuǎn) PDF 頁面,從而避免手動(dòng)操作,提高處理效率,下面我們就來看看具體實(shí)現(xiàn)方法吧
    2026-01-01
  • Java?OpenCV圖像處理之背景切換

    Java?OpenCV圖像處理之背景切換

    這篇文章主要介紹了利用Java?OpenCV實(shí)現(xiàn)圖像背景的切換,文中的示例代碼講解詳細(xì)。對(duì)我們學(xué)習(xí)OpenCV有一定幫助,感興趣的同學(xué)可以了解一下
    2022-01-01
  • Spring Security SecurityContextHolder組件示例說明

    Spring Security SecurityContextHolder組件示例說明

    SpringSecurity的SecurityContextHolder組件是存儲(chǔ)當(dāng)前安全上下文的地方,包括認(rèn)證用戶信息,它支持全局訪問、線程局部存儲(chǔ)和上下文傳播,是SpringSecurity認(rèn)證和授權(quán)的核心,文章通過示例展示了如何訪問已認(rèn)證用戶的詳細(xì)信息、手動(dòng)設(shè)置認(rèn)證信息以及使用認(rèn)證信息保護(hù)方法
    2024-11-11
  • Springboot項(xiàng)目中單元測(cè)試時(shí)注入bean失敗的解決方案

    Springboot項(xiàng)目中單元測(cè)試時(shí)注入bean失敗的解決方案

    這篇文章主要介紹了Springboot項(xiàng)目中單元測(cè)試時(shí)注入bean失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法示例

    Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法示例

    這篇文章主要介紹了Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法,簡(jiǎn)單說明了余弦相似性的概念、原理并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)余弦相似性算法的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • SpringBoot實(shí)現(xiàn)對(duì)Http接口進(jìn)行監(jiān)控的代碼

    SpringBoot實(shí)現(xiàn)對(duì)Http接口進(jìn)行監(jiān)控的代碼

    Spring Boot Actuator是Spring Boot提供的一個(gè)模塊,用于監(jiān)控和管理Spring Boot應(yīng)用程序的運(yùn)行時(shí)信息,本文將介紹一下Spring Boot Actuator以及代碼示例,以及如何進(jìn)行接口請(qǐng)求監(jiān)控,需要的朋友可以參考下
    2024-07-07
  • java取兩個(gè)字符串的最大交集

    java取兩個(gè)字符串的最大交集

    這篇文章主要介紹了java取兩個(gè)字符串的最大交集的方法,涉及Java對(duì)字符串操作的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • 關(guān)于IntelliJ IDEA 打包代碼報(bào)錯(cuò)的問題

    關(guān)于IntelliJ IDEA 打包代碼報(bào)錯(cuò)的問題

    這篇文章主要介紹了關(guān)于IntelliJ IDEA 打包代碼報(bào)錯(cuò)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論

黑龙江省| 土默特右旗| 阿坝| 习水县| 嘉兴市| 昌乐县| 普定县| 定结县| 若尔盖县| 凉城县| 涡阳县| 虹口区| 辽中县| 西青区| 离岛区| 平昌县| 滕州市| 扎鲁特旗| 和林格尔县| 正镶白旗| 鄂尔多斯市| 孙吴县| 车险| 象州县| 勃利县| 庄浪县| 中牟县| 凉山| 巨野县| 西丰县| 襄樊市| 黔西| 南丰县| 甘泉县| 嫩江县| 玉田县| 星座| 繁昌县| 河北区| 高碑店市| 阳山县|