生产者消费者简单代码
消费者类:
package stu;
import org.apache.commons.lang3.StringUtils;
public class Consumer implements Runnable{
public String name;
@Override
public void run() {
while(true){
String poll = null;
synchronized (Container.container) {
poll = Container.container.poll();
if(!StringUtils.isEmpty(poll)){
System.out.println(name+"吃一个"+poll);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
try {
System.out.println("厨师好慢!!"+name+"进入等待!");
//释放锁
Container.container.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public Consumer(String name) {
super();
this.name = name;
}
}
生产者类:
package stu;
import java.util.Date;
/**
* @author admin
*
*/
public class Producer implements Runnable{
public String name;
public String[] foods = new String[]{"薯条","可乐","汉堡","鸡翅"};
@Override
public void run() {
while(true){
Date date = new Date();
int choice = (int) (date.getTime()%4);
String food = foods[choice];
synchronized (Container.container) {
System.out.println(name+"做了一个"+food);
Container.container.add(food);
if(Container.container.size()==1){
System.out.println(name+"通知客户去取餐!");
Container.container.notifyAll();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public Producer(String name) {
super();
this.name = name;
}
}
缓冲区:
package stu;
import java.util.LinkedList;
public class Container {
/**
* 缓冲区
*/
public static LinkedList container= new LinkedList();
}
程序入口:
package stu;
public class StartConsume {
public static void main(String[] args) {
Consumer c1 = new Consumer("攀攀");
Consumer c2 = new Consumer("宝宝");
Producer p1 = new Producer("王大厨");
Producer p2 = new Producer("李大厨");
Thread t1 = new Thread(c1);
Thread t2 = new Thread(c2);
Thread t3 = new Thread(p1);
Thread t4 = new Thread(p2);
t1.start();
t2.start();
t3.start();
t4.start();
}
}