我也做过同样的事情。诀窍是创建一个BlockingQueue,其中offer()方法实际上是put()。(您可以使用所需的任何基本BlockingQueue隐式表示形式)。
public class LimitedQueue<E> extends linkedBlockingQueue<E> { public LimitedQueue(int maxSize) { super(maxSize); } @Override public boolean offer(E e) { // turn offer() and add() into a blocking calls (unless interrupted) try { put(e); return true; } catch(InterruptedException ie) { Thread.currentThread().interrupt(); } return false; }}请注意,这仅适用于线程池,
corePoolSize==maxPoolSize因此请注意此处(请参见注释)。



