使用Exchanger线程之间交换数据

public class ExchangeThread {
	    static class Producer implements Runnable{

	        //生产者、消费者交换的数据结构
	        private List buffer;

	        //步生产者和消费者的交换对象
	        private Exchanger> exchanger;

	        Producer(List buffer,Exchanger> exchanger){
	            this.buffer = buffer;
	            this.exchanger = exchanger;
	        }

	        @Override
	        public void run() {
	            for(int i = 1 ; i < 5 ; i++){
					try {
						Thread.sleep(20000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("生产者第" + i + "次提供");
	                for(int j = 1 ; j <= 3 ; j++){
	                    System.out.println("生产者装入" + i  + "--" + j);
	                    buffer.add("buffer:" + i + "--" + j);
	                }

	                System.out.println("生产者装满,等待与消费者交换...");
	                try {

	                    exchanger.exchange(buffer);
	                } catch (InterruptedException e) {
	                    e.printStackTrace();
	                }
	            }
	        }
	    }

	    static class Consumer implements Runnable {
	        private List buffer;

	        private final Exchanger> exchanger;

	        public Consumer(List buffer, Exchanger> exchanger) {
	            this.buffer = buffer;
	            this.exchanger = exchanger;
	        }

	        @Override
	        public void run() {
	            for (int i = 1; i < 5; i++) {
	                //调用exchange()与消费者进行数据交换
	                try {
	                    buffer = exchanger.exchange(buffer);
	                } catch (InterruptedException e) {
	                    e.printStackTrace();
	                }
	                
	                System.out.println("消费者第" + i + "次提取");
	                for (int j = 1; j <= 3 ; j++) {
	                    System.out.println("消费者 : " + buffer.get(0));
	                    buffer.remove(0);
	                }
	            }
	        }
	    }

	    public static void main(String[] args){
	        List buffer1 = new ArrayList();
	        List buffer2 = new ArrayList();

	        Exchanger> exchanger = new Exchanger>();

	        Thread producerThread = new Thread(new Producer(buffer1,exchanger));
	        Thread consumerThread = new Thread(new Consumer(buffer2,exchanger));
			System.out.println("生产---->>>"+producerThread.getState());
			System.out.println("消费------>>>"+consumerThread.getState());
	        producerThread.start();
	        consumerThread.start();
			System.out.println("生产start---->>>"+producerThread.getState());
			System.out.println("消费start------>>>"+consumerThread.getState());
	    }
	



}

你可能感兴趣的:(java,windows,开发语言)