线程池-Executor抽象
1 | public interface Executor { |
无界的 blocking queue,因为它是 unbouned 的,所以从逻辑上来说,put 操作是不会失败的,除非内存资源被耗尽(causing OutOfMemoryError)。
不支持 null 元素。
iterator 不保证顺序。
内部使用二叉堆(binary heap)来实现维护入队元素的顺序。
SynchronousQueue 是 blocking queue 队列的一种,它的作用是,当一个线程执行插入操作(put)的时候,必须等待另一个线程执行对应的删除操作(take),反之,一个线程如果要执行删除操作则必须等待另一个线程执行插入操作。
What We CAN’T DO IN SynchronousQueue:
BlockingQueue 的基于链表的实现
在其内部,实现中使用,two lock queue, 使用是两个锁,
1 | /** Lock held by take, poll, etc */ |