本节主要介绍简单的生产一个产品的生产者消费者模式,目的:
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();
}
}
网友评论