欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

自旋鎖

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

  • 此處主要利用while空輪詢以及原子包的CAS
package com.gy.spinlock;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 利用空輪詢實現(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提升性能

  • 第一種實現(xiàn)問題比較明顯,當(dāng)我們的線程沒有獲得鎖之前都是空輪詢,此時我們可以讓沒有獲取鎖的線程停止
package com.gy.spinlock;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 利用空輪詢實現(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的時間是不好控制的,那么這里有沒有一種方式可以直接讓程序停止知道unlock的時候才被喚醒
  • park方法和unPark方法就能實現(xiàn)這樣的功能
  • 此處unLock處不一定就是unPark的線程獲得鎖
  • 此處加鎖解鎖是否同一線程并未處理,處理方式只需要記錄加鎖線程解鎖時判斷即可
package com.gy.spinlock;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
/**
 * 利用空輪詢實現(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實現(xiàn)自定義自旋鎖代碼實例的文章就介紹到這了,更多相關(guān)Java自定義自旋鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java短路邏輯運算符實例用法詳解

    java短路邏輯運算符實例用法詳解

    在本篇文章里小編給大家分享的是一篇關(guān)于java短路邏輯運算符實例用法內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-04-04
  • SpringBoot+vue+Axios實現(xiàn)Token令牌的詳細過程

    SpringBoot+vue+Axios實現(xiàn)Token令牌的詳細過程

    Token是在服務(wù)端產(chǎn)生的,前端可以使用用戶名/密碼向服務(wù)端請求認證(登錄),服務(wù)端認證成功,服務(wù)端會返回?Token?給前端,Token可以使用自己的算法自定義,本文給大家介紹SpringBoot+vue+Axios實現(xiàn)Token令牌,感興趣的朋友一起看看吧
    2023-10-10
  • java中DecimalFormat四舍五入用法詳解

    java中DecimalFormat四舍五入用法詳解

    這篇文章主要為大家詳細介紹了java中DecimalFormat四舍五入的用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java常用類庫Apache Commons工具類說明及使用實例詳解

    Java常用類庫Apache Commons工具類說明及使用實例詳解

    這篇文章主要介紹了Java常用類庫Apache Commons工具類說明及使用實例詳解,需要的朋友可以參考下
    2020-02-02
  • 使用 Spring Boot 2.0 + WebFlux 實現(xiàn) RESTful API功能

    使用 Spring Boot 2.0 + WebFlux 實現(xiàn) RESTful API功能

    什么是 Spring WebFlux, 它是一種異步的, 非阻塞的, 支持背壓(Back pressure)機制的Web 開發(fā)框架.下面通過本文給大家介紹使用 Spring Boot 2.0 + WebFlux 實現(xiàn) RESTful API功能,需要的朋友參考下吧
    2018-01-01
  • SpringBoot Admin的簡單使用的方法步驟

    SpringBoot Admin的簡單使用的方法步驟

    本文主要介紹了SpringBoot Admin的簡單使用的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java類中this關(guān)鍵字與static關(guān)鍵字的用法解析

    Java類中this關(guān)鍵字與static關(guān)鍵字的用法解析

    這篇文章主要介紹了Java類中this關(guān)鍵字與static關(guān)鍵字的用法解析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 基于Java實現(xiàn)動態(tài)切換ubuntu壁紙功能

    基于Java實現(xiàn)動態(tài)切換ubuntu壁紙功能

    這篇文章主要為大家詳細介紹了如何使用 Java 在 Ubuntu Linux 系統(tǒng)中實現(xiàn)自動切換壁紙的示例程序,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Intellij IDEA調(diào)試技巧的深入講解

    Intellij IDEA調(diào)試技巧的深入講解

    這篇文章主要給大家介紹了關(guān)于Intellij IDEA調(diào)試技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • @RequestBody,@RequestParam和@Param的區(qū)別說明

    @RequestBody,@RequestParam和@Param的區(qū)別說明

    這篇文章主要介紹了@RequestBody,@RequestParam和@Param的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論