91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中怎么利用lockInterruptibly方法實現并發

發布時間:2021-07-01 14:46:49 來源:億速云 閱讀:197 作者:Leah 欄目:大數據

這篇文章給大家介紹java中怎么利用lockInterruptibly方法實現并發,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

lockInterruptibly方法是說線程在等待獲取鎖的同時還能響應線程interrupt方法的中斷請求。換句話說就是存在等待獲取鎖的同時還不能響應線程interrupt方法的中斷請求的情況,synchronized內置鎖便是,請看測試代碼:

public class LockInterruptTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Thread t1 = new Thread(){
            public void run(){
                synchronized (LockInterruptTest.class) {
                    while(true){
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        };
        t1.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        Thread t2 = new Thread(){
            public void run(){
                synchronized (LockInterruptTest.class) {
                    while(true){
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        };
        t2.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        Thread t3 = new Thread(){
            public void run(){
                System.out.println("準備中斷t2");
                t2.interrupt();
                System.out.println("中斷t2");
            }
        };
        t3.start();
    }

}
代碼中準備了3個線程,第2個線程嘗試獲取第1個線程的鎖,第3個線程嘗試中斷第2個線程。代碼是能夠正常看到“中斷t2”的,但是用jconsole工具就能看到第2個線程由于嘗試獲取鎖一直阻塞著:

java中怎么利用lockInterruptibly方法實現并發

換成lockInterruptibly后代碼如下:

public class LockInterruptTest {
    static ReentrantLock lock = new ReentrantLock();

    public static void main(String[] args) {
        Thread t1 = new Thread() {
            public void run() {
                try {
                    lock.lockInterruptibly();
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                try {
                    while (true) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                } finally {
                    lock.unlock();
                }
            }
        };
        t1.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        Thread t2 = new Thread() {
            public void run() {
                try {
                    lock.lockInterruptibly();
                    while (true) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                } finally {
                    lock.unlock();
                }
            }
        };
        t2.start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        Thread t3 = new Thread() {
            public void run() {
                System.out.println("準備中斷t2");
                t2.interrupt();
                System.out.println("中斷t2");
            }
        };
        t3.start();
    }

}

通過jconsole工具可以發現第2個線程被成功中斷。
 

關于java中怎么利用lockInterruptibly方法實現并發就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余姚市| 卢湾区| 来安县| 石河子市| 东乌珠穆沁旗| 沅陵县| 连城县| 长春市| 鞍山市| 特克斯县| 昭通市| 阳山县| 铜山县| 白朗县| 安达市| 大关县| 永年县| 丰城市| 宁明县| 定兴县| 巴彦淖尔市| 开远市| 汽车| 凉城县| 星子县| 内黄县| 黄平县| 洛川县| 布尔津县| 乌海市| 梨树县| 平泉县| 新闻| 泾阳县| 监利县| 栾川县| 阜新市| 南岸区| 土默特左旗| 图木舒克市| 黄陵县|