实现多线程的生产者消费者模式。
描述:利用ThreadPoolExecutor线程池,LinkedBlockingQueue队列进行消息缓存,实现生产者消费者模式。
本次实验难点(对本人菜鸟而言):
- 使用计时的手段来判断是否已经没有生产者提供消息了,以便关闭消费者线程。
- 第一次使用LinkBlockingQueue的方式实现,所以没有区分add(),put的区别,以及take(),poll()的区别。导致前期没办法进入计时的代码,程序一直没有关闭。
- 程序没有关闭的原因还有是线程池没有手动shutdown()的缘故,放到main()后面,就行了。在main方法结尾必须判断是否还有存活的线程,然后手动关闭线程池,这样才可以让程序自动停止。
BlockingQueue定义的常用方法如下
|
抛出异常 |
特殊值 |
阻塞 |
超时 |
插入 |
add(e) |
offer(e) |
put(e) |
offer(e,time,unit) |
移除 |
remove() |
poll() |
take() |
poll(time,unit) |
检查 |
element() |
peek() |