并发之阻塞队列
阻塞队列
- 使用背景
- 作用
- 从阻塞队列中获取元素常用的三个方法
- 往阻塞队列中存放元素的三种方式
使用背景
想要在多个线程之间传递数据,用一般的对象是不行的,比如我们常用的ArrayList和HashMap都不适合由多个线程同时操作,可能会造成数据丢失或者数据重复。
这是因为多个线程在执行的时候,执行的顺序是随机的。我们无法预判线程执行的先后顺序。可以说这完全取决于CPU。
作用
使用BlockingQueue则可以在多个线程之间安全地传递数据。一般的队列是没有控制线程状态的功能的,为了体现这种队列的强大,让人一眼望去就知道,它能让当前线程阻塞,于是人们给它加了一个Blocking前缀。
从阻塞队列中获取元素常用的三个方法
- take() 死等
- poll(long, TimeUnit) 等一段时间
- poll 不等
往阻塞队列中存放元素的三种方式
- put() 一直等
- offer(E, long, TimeUnit) 等一段时间
- offer(E) 不等
参考资料:【Java并发·10】阻塞队列 基础