Java併發編程知識點總結(十三)——LockSupport方法總結

(一)、LockSupport概述

我們在前面分析ReentrantLock以及Condition通信機制的時候多次使用到LockSupport.park()以及LockSupport.unpark()方法。LockSupport是用來阻塞線程的工具,park()方法用來阻塞線程,unpark()方法用來喚醒線程。
LockSupport是不支持重入的,每一條線程都會對應一個許可,如果這個許可可用,調用park()方法就不會發生阻塞。但是如果不可用,調用park()方法就會發生線程阻塞,這時就可以使用unpark()方法來獲取許可。

(二)、LockSupport常用方法

方法 功能
void park() 阻塞當前線程,如果調用unpark方法或者當前線程被中斷,從能從park()方法中返回
void park(Object blocker) 功能同方法1,入參增加一個Object對象,用來記錄導致線程阻塞的阻塞對象,方便進行問題排查
void parkNanos(long nanos) 阻塞當前線程,最長不超過nanos納秒,增加了超時返回的特性
void parkNanos(Object blocker, long nanos) 功能同方法3,入參增加一個Object對象,用來記錄導致線程阻塞的阻塞對象,方便進行問題排查
void parkUntil(long deadline) 阻塞當前線程,知道deadline
void parkUntil(Object blocker, long deadline) 功能同方法5,入參增加一個Object對象,用來記錄導致線程阻塞的阻塞對象,方便進行問題排查
void unpark(Thread thread) 喚醒處於阻塞狀態的指定線程

(三)、LockSupport使用方法

public static void main(String[] args) {
        //線程1
        Thread thread1 = new Thread() {
            @Override
            public void run() {
                System.out.println("執行park方法前");
                LockSupport.park();
                System.out.println("執行park方法後");
            }
        };
		//線程2
        Thread thread2 = new Thread() {
            @Override
            public void run() {
                System.out.println("執行unpark方法前");
                LockSupport.unpark(thread1);
                System.out.println("執行unpark方法後");
            }
        };
        thread1.start();
        thread2.start();
    }

在這裏插入圖片描述
在上面的例子中,我們利用線程1和線程2分別調用park()以及unpark()方法。
參考文章:LockSupport工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章