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