溫馨提示×

溫馨提示×

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

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

Java的Exchanger方法怎么使用

發布時間:2022-02-23 15:03:13 來源:億速云 閱讀:198 作者:iii 欄目:開發技術

這篇文章主要講解了“Java的Exchanger方法怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java的Exchanger方法怎么使用”吧!

簡介

Exchanger是一個用于線程間數據交換的工具類,它提供一個公共點,在這個公共點,兩個線程可以交換彼此的數據。

當一個線程調用exchange方法后將進入等待狀態,直到另外一個線程調用exchange方法,雙方完成數據交換后繼續執行。

Exchanger的使用

方法介紹

exchange(V x):阻塞當前線程,直到另外一個線程調用exchange方法或者當前線程被中斷。

  1. x : 需要交換的對象。

exchange(V x, long timeout, TimeUnit unit):阻塞當前線程,直到另外一個線程調用exchange方法或者當前線程被中斷或者等待超時。

  • x: 需要交換的對象。

  • timeout:超時時間。

  • unit:超時時間單位。

exchange方法正常情況返回交換到的對象,當當前線程被中斷或者等待超時時,exchange方法返回null。

示例1:A同學和B同學交換各自收藏的大片

public class Demo {
    public static void main(String[] args) {
        Exchanger<String> stringExchanger = new Exchanger<>();

        Thread studentA = new Thread(() -> {
            try {
                String dataA = "A同學收藏多年的大片";
                String dataB = stringExchanger.exchange(dataA);
                System.out.println("A同學得到了" + dataB);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread studentB = new Thread(() -> {
            try {
                String dataB = "B同學收藏多年的大片";
                String dataA = stringExchanger.exchange(dataB);
                System.out.println("B同學得到了" + dataA);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        studentA.start();
        studentB.start();
    }
}

/*
 * 輸出結果:
 * B同學得到了A同學收藏多年的大片
 * A同學得到了B同學收藏多年的大片
 */

示例2:A同學被放鴿子,交易失敗

public class Demo {
    public static void main(String[] args) {
        Exchanger<String> stringExchanger = new Exchanger<>();

        Thread studentA = new Thread(() -> {
            String dataB = null;
            try {
                String dataA = "A同學收藏多年的大片";
                //最多等待5秒
                dataB = stringExchanger.exchange(dataA, 5, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (TimeoutException ex){
                System.out.println("等待超時-TimeoutException");
            }

            System.out.println("A同學得到了" + dataB);
        });

        studentA.start();
    }
}

/*
 * 輸出結果:
 * 等待超時-TimeoutException
 * A同學得到了null
 */

感謝各位的閱讀,以上就是“Java的Exchanger方法怎么使用”的內容了,經過本文的學習后,相信大家對Java的Exchanger方法怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女