1 两个线程进行数据交换
package thread.test1; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.Exchanger; /** * 作用:Exchanger :两个线程进行数据交换 * */ public class ExchangerTest { public static void main(String[] args) { ExchangerTest exchangerTest = new ExchangerTest(); Exchanger<List<Integer>> exchanger = new Exchanger<List<Integer>>(); new Thread(exchangerTest.new Work(1, exchanger)).start(); new Thread(exchangerTest.new Work(2, exchanger)).start(); } class Work implements Runnable{ private Exchanger<List<Integer>> exchanger ; private List<Integer> data =new ArrayList<Integer>(); private Integer num ; //线程 public Work(Integer num ,Exchanger<List<Integer>> exchanger ){ this.num = num ; this.exchanger = exchanger; } @Override public void run() { Random random = new Random(); data.add(random.nextInt(20) ) ; data.add(random.nextInt(20) ) ; data.add(random.nextInt(20) ) ; System.out.println("线程:"+num+ " 数据:"+ data); try { exchanger.exchange( data) ; System.out.println( "线程:"+num+ "数据更改结束。"+data); } catch (InterruptedException e) { e.printStackTrace(); } } } }
结果:
线程:1 数据:[6, 19, 19] 线程:2 数据:[1, 1, 0] 线程:1数据更改结束。[6, 19, 19] 线程:2数据更改结束。[1, 1, 0]