JUC之Exchanger-多執行緒與高併發

phs999發表於2020-10-09
Exchanger支援兩個執行緒交換指定型別T的值(物件的話是交換引用,基本型別的話直接交換值)
一個執行緒在執行exchange()方法後進入阻塞等待狀態(也可以提前指定要等待的時間),等待另一個執行緒呼叫同一個exchanger物件的exchange()方法
交換完成後,執行緒不再阻塞,可以繼續執行後面的程式碼。
package basic.aqs.Exchanger;

import java.util.concurrent.Exchanger;

/**
 * Exchanger支援兩個執行緒交換指定型別T的值(物件的話是交換引用,基本型別的話直接交換值)
 * 一個執行緒在執行exchange()方法後進入阻塞等待狀態(也可以提前指定要等待的時間),等待另一個執行緒呼叫同一個exchanger物件的exchange()方法
 * 交換完成後,執行緒不再阻塞,可以繼續執行後面的程式碼
 */

public class TestExchanger {

    static Exchanger<String> exchanger = new Exchanger<>();

    public static void main(String[] args) {
        new Thread(()->{
            String s = "T1";
            try {
                s = exchanger.exchange(s);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + " " + s);

        }, "t1").start();


        new Thread(()->{
            String s = "T2";
            try {
                s = exchanger.exchange(s);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + " " + s);

        }, "t2").start();


    }
}

 

相關文章