移动架构--9.生产者消费者模式

2018-08-08  本文已影响0人  小小秤

本节主要介绍简单的生产一个产品的生产者消费者模式,目的:
1.理解生产者消费者模式
2.Java线程间的通信
3.为手写Android Handler、Looper、Message、MessageQueue架构做准备。

public class ProducerAndConsumer{
  //1.产品类
  static public class Product{
    //vilatile java 线程频繁的改变value值会在线程本地创造一个变量
    //加volatile保证不会提前消费产生泡沫
    public static volatile String value;
  }
  //2.生产者线程
  static Producer extends Thread{
    Object lock;
    public Producer(Object lock){this.lock=lock;}
    @Override
    public void run(){
      //不断生产产品
      while(true){
        synchronized(lock){//互斥锁
          //产品还没有被消费,等待
          if(Product.value!=null){
            try{lock.wait();}catch(Exception e){e.printStackTrace();}
          }
          //产品已经消费完成,生产新的产品
          Product.value = "NO:"+System.currentTimeMillis();
          System.out.println("生产产品:"+ProductObject.value);
          lock.notify(); //生产完成,通知消费者消费
        }
      }
    }
  }
  //3.消费者线程
  static class Consumer extends Thread{
    Object lock;
    public Consumer(Object lock) {this.lock = lock;}
    @Override
    public void run() {
      while(true){
        synchronized (lock) {
          //没有产品可以消费
          if(Product.value == null){//等待,阻塞
            try {lock.wait();} catch (Exception e) {e.printStackTrace();}
          }
          System.out.println("消费产品:"+ProductObject.value);
          ProductObject.value = null;
          lock.notify(); //消费完成,通知生产者,继续生产
        }
      }
    }
  }
 

  public static void main(String[] args) {
    Object lock = new Object();
    new Producer(lock).start();     
    new Consumer(lock).start();
  }
}
上一篇下一篇

猜你喜欢

热点阅读