1.Bread 类:
package com.dada.concurrent;
public class Bread {
}
2.Producer类:
package com.dada.concurrent;
import java.util.concurrent.ArrayBlockingQueue;
public class Producer implements Runnable {
private final ArrayBlockingQueue<Bread> queue;
public Producer(ArrayBlockingQueue<Bread> queue) {
this.queue = queue;
}
@Override
public void run() {
while(true) {
produce();
}
}
public void produce() {
try{
Bread bread = new Bread();
queue.put(bread);
System.out.println("Producer:"+bread);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3.Consumer类:
package com.dada.concurrent;
import java.util.concurrent.ArrayBlockingQueue;
public class Consumer implements Runnable {
private final ArrayBlockingQueue<Bread> queue;
public Consumer(ArrayBlockingQueue<Bread> queue) {
this.queue = queue;
}
@Override
public void run() {
while(true) {
try {
consume();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void consume() throws Exception {
try{
Bread bread = queue.take();
System.out.println("Consumer:"+bread);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.Client类:
package com.dada.concurrent;
import java.util.concurrent.ArrayBlockingQueue;
public class Client {
public static void main(String[] args) {
new Thread(new Producer(queue)).start();
new Thread(new Producer(queue)).start();
new Thread(new Consumer(queue)).start();
new Thread(new Consumer(queue)).start();
new Thread(new Consumer(queue)).start();
}
private static int capacity = 10;
private static ArrayBlockingQueue<Bread> queue = new ArrayBlockingQueue<Bread>(capacity);
}