java多线程:16、阻塞队列【BlockingQueue】实现线程数据共享的效果

来源:互联网 发布:最具潜力的淘宝商品 编辑:程序博客网 时间:2024/06/05 07:15
import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;/** *阻塞队列BlockingQueue 实现线程通信的效果 *A、B连个线程交替执行任务 */public class ThreadTest2 {    public static void main(String[] args) {        final OutputUtil output=new OutputUtil();        new Thread(new Runnable(){            @Override            public void run() {                // TODO Auto-generated method stub                while(true){                    output.main();                }            }        }).start();        new Thread(new Runnable(){            @Override            public void run() {                // TODO Auto-generated method stub                while(true){                    output.child();                }            }        }).start();    }    static class OutputUtil{        private BlockingQueue<Integer> bq1=new ArrayBlockingQueue<>(1),                                       bq2=new ArrayBlockingQueue<>(1);        /**         * 匿名构造方法:执行构造方式前先执行匿名构造方法         */        {            try {                bq2.put(1);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        public void main(){            try {                bq1.put(1);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            for(int i=1;i<=10;i++){                System.out.println(Thread.currentThread().getName()+":"+i);            }            try {                bq2.take();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        public void child(){            try {                bq2.put(1);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            for(int i=1;i<=10;i++){                System.out.println(Thread.currentThread().getName()+":"+i);            }            try {                bq1.take();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}
0 0
原创粉丝点击