首页 > 代码库 > 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();//开启消费线程 }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。