话不多说,直接上代码:
github代码地址
生产者
package com.pattern.productorconsumer.blockingqueue;
import java.util.concurrent.BlockingQueue;
/**
* 生产者
*/
@SuppressWarnings("rawtypes")
public class Producer implements Runnable{
private final BlockingQueue sharedQueue;
public Producer(BlockingQueue sharedQueue){
this.sharedQueue = sharedQueue;
}
@Override
public void run() {
for (int i = 1;i <= 10;i++){
System.out.println("生产:" + i);
try {
sharedQueue.put(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
消费者
package com.pattern.productorconsumer.blockingqueue;
import java.util.concurrent.BlockingQueue;
/**
* 消费者
*/
@SuppressWarnings("rawtypes")
public class Consumer implements Runnable{
private final BlockingQueue sharedQueue;
public Consumer(BlockingQueue sharedQueue){
this.sharedQueue = sharedQueue;
}
@Override
public void run() {
for (int i = 1;i <= 10;i++){
try {
System.out.println("消费:" + sharedQueue.take());
}catch (Exception e){
e.printStackTrace();
}
}
}
}
主程序
package com.pattern.productorconsumer.blockingqueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 阻塞队列实现 生产者消费者模式
*/
@SuppressWarnings("rawtypes")
public class ProductAndConsumerPattern {
public static void main(String[] args) {
BlockingQueue blockingQueue = new LinkedBlockingQueue();
Thread pThread = new Thread(new Producer(blockingQueue));
Thread cThread = new Thread(new Consumer(blockingQueue));
pThread.start();
System.out.println("=============");
cThread.start();
}
}
执行结果:
总结:
- 阻塞队列 put take ;
- 实现Runnable。