交换器的使用案例

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)    收藏  举报

导航