为了账号安全,请及时绑定邮箱和手机立即绑定

工厂模式

标签:
Android

public class Test {

    /**

     * 线程机制为了提高运行效率,当一个线程在不断的访问一个变量

     * 线程会使用一个私有空间 存储这个变量

     *

     * volatile 关键字 易变变量

     * 专门修饰被不同线程访问和修改的变量

     * 让线程访问这个变量 每次都从变量原地址读取

     * @param args

     */

    public static void main(String[] args){

        Object mutex = new Object();

        new Producer(mutex).start();

        new Consumer(mutex).start();

    }

    /**

     * 产品

     */

    static class Product{

        public volatile static String value = null;

    }

    /**

     * 消费者

     */

    static class Consumer extends Thread{

        private  Object mutex;

        public Consumer(Object mutex) {

            this.mutex = mutex;

        }

        @Override

        public void run() {

            //一直消费产品

            while (true){

               synchronized (mutex){

                   //如果还没生产出产品 等待生产出产品

                   if (null == Product.value){

//                    System.out.println("consumer :"+Product.value);

//                    Product.value = null;

                       try {

                           mutex.wait();

                       } catch (InterruptedException e) {

                           e.printStackTrace();

                       }

                   }

                   //使用

                   System.out.println("consumer :"+Product.value);

                   Product.value = null;

                   //通知生产者 可以生产了

                   mutex.notify();

               }

            }

        }

    }

    /**

     * 生产者

     */

    static class Producer extends Thread{

        private  Object mutex;

        public Producer(Object mutex) {

            this.mutex = mutex;

        }

        @Override

        public void run() {

            //生产 产品

            while (true){

                synchronized (mutex){

                    //如果没有产品就生产

                    if (null != Product.value){

                        try {

                            mutex.wait();

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                    }

                    Product.value = "NO:"+System.currentTimeMillis();

                    System.out.println("producer ");

                    //通知消费者 可以消费了

                    mutex.notify();

                }

            }

        }

    }

}

原文链接:http://www.apkbus.com/blog-340477-76911.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消