import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
public class Consumer extends Thread {
private String product;
private Queue<String> storeHouse = new LinkedBlockingQueue<String>();
public Consumer(){
}
public Consumer(Queue<String> storeHouse){
this.storeHouse = storeHouse;
}
public void consume(){
while (true) {
synchronized (storeHouse) {
try {
while (storeHouse.isEmpty()) {
System.out.println("storeHouse is empty , please wait");
storeHouse.wait();
}
}catch (InterruptedException ie){
}
}
product = storeHouse.poll();
System.out.println("Consume :"+product);
}
}
public void run() {
consume();
}
}
import java.util.Queue;
import java.util.Random;
import java.util.concurrent.LinkedBlockingQueue;
public class Producer extends Thread {
private String product;
private Queue<String> storeHouse = new LinkedBlockingQueue<String>();
public Producer(){
}
public Producer(Queue<String> storeHouse){
this.storeHouse = storeHouse;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
@Override
public void run(){
produce();
}
public void produce(){
while (true) {
synchronized (storeHouse) {
setProduct(getRandomString(5)) ;
storeHouse.add(product);
System.out.println("Produce : "+getProduct());
try {
storeHouse.notifyAll();
Thread.sleep(10);
}catch (InterruptedException e){
return ;
}
}
}
}
public static String getRandomString(int length){
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer stringBuffer = new StringBuffer();
for(int i = 0 ; i < length; ++i){
int number = random.nextInt(62);//[0,62)
stringBuffer.append(str.charAt(number));
}
return stringBuffer.toString();
}
}
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
public class ProducerConsumer {
private int MAX = 10;
public ProducerConsumer() {
}
public static void main(String[] args) {
Queue<String> storeHouse = new LinkedBlockingQueue<String>();
Producer producer1 = new Producer(storeHouse);
Producer producer2 = new Producer(storeHouse);
Producer producer3 = new Producer(storeHouse);
Consumer comsumer1 = new Consumer(storeHouse);
Consumer comsumer2 = new Consumer(storeHouse);
Consumer comsumer3 = new Consumer(storeHouse);
Consumer comsumer4 = new Consumer(storeHouse);
Thread p1 = new Thread(producer1);
Thread p2 = new Thread(producer2);
Thread p3 = new Thread(producer3);
Thread c1 = new Thread(comsumer1);
Thread c2 = new Thread(comsumer2);
Thread c3 = new Thread(comsumer3);
Thread c4 = new Thread(comsumer4);
p1.start();
p2.start();
p3.start();
c1.start();
c2.start();
c3.start();
c4.start();
}
}