Exchanger,用于线程随机交换数据

54 阅读1分钟

Exchanger功能:当一个线程运行到exchange()方法时会阻塞,另一个线程运行到exchange()时,二者交换数据,然后执行后面的程序。在实际项目中使用场景很少,几乎不被使用,大家了解即可!

image.png

public static void main(String[] args) {  
    final Exchanger<Integer> exchanger = new Exchanger<Integer>();  
    for (int i = 0; i < 10; i++) {  
        final Integer num = i;  
        new Thread() {  
            public void run() {  
                System.*out*.println("我是线程:Thread_" + this.getName() + "我的数据是:" + num);  
                try {  
                    Integer exchangeNum = exchanger.exchange(num);  
                    Thread.*sleep*(1000);  
                    System.*out*.println("我是线程:Thread_" + this.getName() + "我原先的数据为:" + num + " , 交换后的数据为:" + exchangeNum);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
        }.start();  
    }  
}