首页 > 代码库 > Java 多线程 简单实例 (消费者与生成者)的关系

Java 多线程 简单实例 (消费者与生成者)的关系

PS::线程这套东西在PHP里完全是不存在的概念,有待进一步的学习;

PS::这个实例是根据书本上的知识进行扩展的,理解程度50%左右吧!

1.定义生产消费环境

package second;public class Queue {    int value = http://www.mamicode.com/0;    boolean isEmpty = true;    /**     * 生产者     * @param v     */    public synchronized void put(int v){        if(!isEmpty){//如果存在数据没有被消费            try{                System.out.println("生产者等待...");                wait();            }catch(Exception e){                            }        }        value ++;//本次生产1个        isEmpty = false;//设置为false(代表有东西了可以消费了)        System.out.println("生产者共生产数量:" + v);        notify();//通知消费者开始消费    }        public synchronized int get(){        //如果消费数据没有了,消费者继续等...        if(isEmpty){            try{                System.out.println("消费者等待...");                wait();            }catch(Exception e){                            }        }        value --;        if(value < 1){            isEmpty = true;//如果消费完了,则设置为true        }        System.out.println("消费者消费一个,剩余:"+value);        notify();        return value;    }}

2.生产者

package second;public class Producer extends Thread {    Queue q;    Producer(Queue q){        this.q = q;    }    public void run(){        for(int i=1;i<5;i++){//循环生产5次            q.put(i);        }    }}

3.消费者

package second;public class Consumer extends Thread {    Queue q;    Consumer(Queue q){        this.q = q;    }    public void run(){        while(true){//永远的消费下去,直到不再生产为止            q.get();        }    }}

4.线程调用

package second;public class Cao {    public static void main(String[] args){        Queue q = new Queue();//实例消费&生成工厂        Producer p = new Producer(q);//将工厂传入给生产者        Consumer c = new Consumer(q);//将工厂传入给消费者        p.start();//开启生成线程        c.start();//开启消费线程    }}