Exchanger线程拷贝

来源:互联网 发布:国际交流软件 编辑:程序博客网 时间:2024/05/24 07:15
import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.Exchanger;/** * Created by yuanyong on 17/2/8. */public class ThreadLocalTest {    public static void main(String[] args) {        Exchanger<List<Integer>> exchanger = new Exchanger<List<Integer>>();        new Consumer(exchanger).start();        new Producer(exchanger).start();    }}class Producer extends Thread {    List<Integer> list = new ArrayList<Integer>();    Exchanger<List<Integer>> exchanger = null;    public Producer(Exchanger<List<Integer>> exchanger) {        super();        this.exchanger = exchanger;    }    @Override    public void run() {        Random rand = new Random();        for(int i=0; i<10; i++) {            list.clear();            list.add(rand.nextInt(10000));            list.add(rand.nextInt(10000));            list.add(rand.nextInt(10000));            list.add(rand.nextInt(10000));            list.add(rand.nextInt(10000));            try {                list = exchanger.exchange(list);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}class Consumer extends Thread {    List<Integer> list = new ArrayList<Integer>();    Exchanger<List<Integer>> exchanger = null;    public Consumer(Exchanger<List<Integer>> exchanger) {        super();        this.exchanger = exchanger;    }    @Override    public void run() {        for(int i=0; i<10; i++) {            try {                list = exchanger.exchange(list);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            System.out.print(list.get(0)+", ");            System.out.print(list.get(1)+", ");            System.out.print(list.get(2)+", ");            System.out.print(list.get(3)+", ");            System.out.println(list.get(4)+", ");        }    }}

0 0
原创粉丝点击