第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

鎖支持工具 LockSupport

1. 前言

本節(jié)帶領(lǐng)大家認(rèn)識(shí)第三個(gè)常用的 Java 并發(fā)鎖工具之 LockSupport。

本節(jié)先介紹 LockSupport 工具類的用途,然后介紹關(guān)鍵的編程方法,最后通過一個(gè)編程例子為大家展示 StampedLock 工具類的用法。

下面我們正式開始介紹吧。

2. 概念解釋

LockSupport 是一個(gè)線程工具類,提供的方法均是靜態(tài)方法,可使用類型直接調(diào)用。其定義的一組以 park 開頭的方法用于阻塞當(dāng)前線程,定義的 unpark 方法用于喚醒被阻塞的線程。

LockSupport 提供的這種功能,應(yīng)用在哪些場(chǎng)合比較合適呢?下面我們給出最常用的場(chǎng)景說明。

3. 常用場(chǎng)景

LockSupport 可以在任何場(chǎng)合使用它阻塞線程,也可以對(duì)指定的任何線程進(jìn)行喚醒,而不用擔(dān)心阻塞和喚醒操作的順序。
JDK 并發(fā)包下的鎖和其他同步工具在底層實(shí)現(xiàn)中大量使用了 LockSupport 工具類 進(jìn)行線程的阻塞和喚醒,了解其用法和原理,可以更好地理解鎖和其它同步工具的底層實(shí)現(xiàn)。

下面我們通過一個(gè)編程例子體會(huì)一下 LockSupport 工具類的用法。

4. 編程案例

import java.util.concurrent.locks.LockSupport;

public class LockSupportTest {

    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + "即將被中斷");
                LockSupport.park();
                System.out.println(Thread.currentThread().getName() + "已經(jīng)被中斷");
            }
        });
        t1.setName("實(shí)驗(yàn)線程");
        // 線程啟動(dòng)立刻執(zhí)行,在線程內(nèi)調(diào)用了 park 做了線程中斷
        t1.start();

        Thread.sleep(5000L);
        // 5 秒后喚醒中斷的線程 t1
        LockSupport.unpark(t1);
        System.out.println(t1.getName() + "被恢復(fù)中斷了");

        Thread.sleep(100000L);
    }
}

運(yùn)行結(jié)果如下:

實(shí)驗(yàn)線程準(zhǔn)備被中斷
實(shí)驗(yàn)線程已經(jīng)被中斷了
實(shí)驗(yàn)線程被恢復(fù)中斷了

用法是不是很簡(jiǎn)單呢?但其中的原理可沒有那么簡(jiǎn)單,需要我們繼續(xù)深入學(xué)習(xí)。

5. 小結(jié)

本節(jié)解釋了 LockSupport 的基本概念和常用場(chǎng)景,且通過一個(gè)簡(jiǎn)單的例子展示了其用法,更多關(guān)于此工具類的概念和原理介紹,可閱讀 “Java 并發(fā)原理入門教程” 。

至此,Java 并發(fā)工具課程全部結(jié)束了。本課程從 Java 并發(fā)包的結(jié)構(gòu)開始講起,然后對(duì)內(nèi)容分類講解,在講解每一個(gè)知識(shí)點(diǎn)時(shí),都解釋了基本概念原理,列舉了應(yīng)用場(chǎng)景,并配示例代碼輔助大家理解。希望大家在學(xué)習(xí)過程中,多思考勤練習(xí),早日掌握之。