package blockqueuetestinfo;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author 向旗
*/
public class QueueMain {
/**
* 定义装苹果的篮子
*/
public static class Basket {
// 篮子,能够容纳3个苹果
BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3);
// 生产苹果,放入篮子
public void produce() throws InterruptedException {
// put方法放入一个苹果,若basket满了,等到basket有位置
basket.put("An apple");
}
// 消费苹果,从篮子中取走
public String consume() throws InterruptedException {
// get方法取出一个苹果,若basket为空,等到basket有苹果为止
return basket.take();
}
}
// 测试方法
public static void testBasket() {
// 建立一个装苹果的篮子
final Basket basket = new Basket();
// 定义苹果生产者
class Producer implements Runnable {
public void run() {
try {
while (true) {
// 生产苹果
System.out.println("生产者准备生产苹果:" + System.currentTimeMillis());
basket.produce();
System.out.println("生产者生产苹果完毕:" + System.currentTimeMillis());
// 休眠300ms
Thread.sleep(300);
}
} catch (InterruptedException ex) {
}
}
}
// 定义苹果消费者
class Consumer implements Runnable {
public void run() {
try {
while (true) {
// 消费苹果
System.out.println("消费者准备消费苹果:" + System.currentTimeMillis());
basket.consume();
System.out.println("消费者消费苹果完毕:" + System.currentTimeMillis());
// 休眠1000ms
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
}
}
}
ExecutorService service = Executors.newCachedThreadPool();
Producer producer = new Producer();
Consumer consumer = new Consumer();
// 提交两个线程到线程池里
service.submit(producer);
service.submit(consumer);
// 程序运行5s后,所有任务停止
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
service.shutdownNow();
}
public static void main(String[] args) {
QueueMain.testBasket();
}
}
BlockingQueue的应用
最新推荐文章于 2024-08-18 21:36:31 发布