PS::线程这套东西在PHP里完全是不存在的概念,有待进一步的学习;
PS::这个实例是根据书本上的知识进行扩展的,理解程度50%左右吧!
1.定义生产消费环境
package second; public class Queue { int value = 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();//开启消费线程 } }
Java 多线程 简单实例 (消费者与生成者)的关系
时间: 2024-11-10 06:26:57