交换器的使用案例
package cn.dyg.exchange; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Exchanger; public class ExchangeLearn { public static void main(String[] args) { Exchanger<List<Integer>> exchange = new Exchanger<List<Integer>>(); Thread productor = new Thread(new Productor(exchange)); Thread consumer = new Thread(new Consumer(exchange)); productor.start(); consumer.start(); try { while(System.in.read() != '\n') { } } catch (IOException e) { e.printStackTrace(); } productor.interrupt(); consumer.interrupt(); } } class Productor implements Runnable { private Exchanger<List<Integer>> exchange; private List<Integer> buffer = new ArrayList<Integer>(); private int BUFFERSIZWE = 10; //设置缓存区的大小 public Productor(Exchanger<List<Integer>> exchange) { this.exchange = exchange; } @Override public void run() { try { for (int i = 0; i < BUFFERSIZWE; i++) { buffer.add((int) (Math.random() * 10 + 1)); Thread.sleep(1000); } exchange.exchange(buffer); //这是一个阻塞方法 System.out.println(buffer); } catch (InterruptedException e) { e.printStackTrace(); } } } class Consumer implements Runnable { private Exchanger<List<Integer>> exchange; private List<Integer> buffer = new ArrayList<Integer>(); public Consumer(Exchanger<List<Integer>> exchange) { this.exchange = exchange; } @Override public void run() { try { buffer = exchange.exchange(buffer); System.out.println(buffer); } catch (InterruptedException e) { e.printStackTrace(); } } }
posted on 2015-12-24 16:20 zhaojunyang 阅读(157) 评论(0) 收藏 举报
浙公网安备 33010602011771号