public class QueueProducer implements Runnable{
private BlockingQueue queue;
public QueueProducer(BlockingQueue queue) {
this.queue = queue;
}
@Override
public void run() {
try {
String temp = "A producer 生产线程"+Thread.currentThread().getName();
System.out.println("i hava made a producer"+Thread.currentThread().getName());
queue.put(temp);//队列满会阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
BlockingQueue queue = new LinkedBlockingDeque<>(2);
QueueProducer producer = new QueueProducer(queue);
QueueConsumer consumer = new QueueConsumer(queue);
for (int i = 0; i < 5; i++) {
new Thread(producer,"producer"+i+1).start();
new Thread(consumer,"consumer"+i+1).start();
}
}
}
class QueueConsumer implements Runnable{
private BlockingQueue queue;
public QueueConsumer(BlockingQueue queue) {
this.queue = queue;
}
@Override
public void run() {
try {
String temp = (String) queue.take();//队列为空,阻塞当前队列
System.out.println(temp);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
i hava made a producerproducer01
i hava made a producerproducer11
A producer 生产线程producer01
i hava made a producerproducer21
A producer 生产线程producer11
i hava made a producerproducer31
i hava made a producerproducer41
A producer 生产线程producer21
A producer 生产线程producer31
A producer 生产线程producer41