大家好,我刚学Java不久,最近刚刚学习了Java的多线程,编写了一个关于生产者消费者模型的程序!贴到这里,希望共同学习一下!由于本人是新手,所以请大家给我提出建议!谢谢!
/*
Java线程间的通信----生产者消费者模型
*/
public class ProducerConsumer{
public static void main(String[] args){
SyncStack ss=new SyncStack();
Producer p=new Producer(ss);
Consumer c=new Consumer(ss);
new Thread(p).start();
new Thread(c).start();
}
}
class Bread{//生产的产品,这里以生产面包为例
int id;
Bread(int id){
this.id=id;
}
}
class SyncStack{//盛面包的容器--栈--先进先出原则
Bread[] arrBread=new Bread[8];//限制最多能装9个面包
int index=0;//计数
synchronized public void push(Bread mt){//生产过程
try{
while(index==arrBread.length){
this.wait();
}
this.notify();
arrBread[index]=mt;
index++;
}catch(InterruptedException e){
e.printStackTrace();
}
}
synchronized public Bread pull (Bread mt){//消费过程
try{
while(index==0){
this.wait();
}
this.notify();
}catch(InterruptedException e){
e.printStackTrace();
}
index--;
return arrBread[index];
}
}
class Producer implements Runnable {//生产者
SyncStack ss=null;
Producer(SyncStack ss){
this.ss=ss;
}
public void run(){
for(int i=0;i<60;i++){//限制最多生产60个
Bread mt=new Bread(i);
ss.push(mt);
System.out.println("生产————>"+i);
try{
Thread.sleep((int) (Math.random()*200));
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{//消费者
SyncStack ss=null;
Consumer(SyncStack ss){
this.ss=ss;
}
public void run(){
for(int i=0;i<60;i++){//限制最多消费60个
Bread mt=new Bread(i);
ss.pull(mt);
System.out.println(i+"————>消费");
try{
Thread.sleep((int) (Math.random()*1000));
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
生产者消费者模型涉及的java知识点还是比较多的,是初学者熟悉知识点的好题目也是一般企业面试的重点题目,其中涉及了类和对象的关系,对象的引用,异常的处理,接口的实现,方法的重写,线程的创建,sleep()应用,wait()和notify()应用,数据结构栈的应用,还有多态的运用!本人认为初学者一定要熟练掌握这个模型!