16得票3回答
队列已满,阻塞队列深度,需要澄清。

从文件内容填充队列时,由于元素未被添加,深度似乎永远不会增加。 BlockingQueue<String> q = new SynchronousQueue<String>(); ... fstream = new File...

32得票10回答
关闭一个阻塞队列

我在一个非常简单的生产者-消费者场景中使用 java.util.concurrent.BlockingQueue。例如,以下伪代码描述了消费者部分:class QueueConsumer implements Runnable { @Override public void ...

13得票4回答
ThreadPoolExecutor policy

我尝试使用ThreadPoolExecutor来调度任务,但在其策略方面遇到了一些问题。以下是它的声明行为: 如果运行的线程少于corePoolSize,则执行程序始终倾向于添加新线程而不是排队。 如果有corePoolSize或更多的线程正在运行,则执行程序始终倾向于将请求排队而不是添加...

120得票10回答
如何让ThreadPoolExecutor在排队之前增加线程数达到最大值?

对于支持许多人使用的ExecutorService线程池的默认行为ThreadPoolExecutor 我已经感到沮丧了一段时间。引用Javadocs的话: 如果正在运行的线程数超过corePoolSize但小于maximumPoolSize,则仅在队列已满的情况下创建新线程。 这意味着,...

21得票5回答
Java阻塞队列与批处理?

我对与Java BlockingQueue完全相同的数据结构感兴趣,但是它必须能够将队列中的对象分批处理。换句话说,我希望生产者能够将对象放入队列中,但是在消费者获取元素之前,必须等待一定数量(即批量大小)的对象进入到队列中。 一旦队列达到批量大小后,生产者必须等待消费者消费完队列中的所有元...

10得票2回答
使用BlockingQueue下载PDF文件

我正在尝试使用URLConnection下载PDF文件。以下是我设置连接对象的方式。URL serverUrl = new URL(url); urlConnection = (HttpURLConnection) serverUrl.openConnection(); urlConnecti...

79得票2回答
何时选择LinkedBlockingQueue而不是ArrayBlockingQueue?

何时应该选择LinkedBlockingQueue而不是ArrayBlockingQueue? 在以下情况下,应该使用哪种数据结构:LinkedBlockingQueue和ArrayBlockingQueue: 希望实现高效的读写操作 需要更少的内存占用 虽然有一个类似的问题,但它没...

11得票4回答
ArrayBlockingQueue使用一个锁来进行插入和删除,而LinkedBlockingQueue使用2个单独的锁。

我正在查看ArrayBlockingQueue和LinkedBlockingQueue的源代码。LinkedBlockingQueue针对插入和删除分别使用putLock和takeLock,但是ArrayBlockingQueue只使用一个锁。我认为LinkedBlockingQueue是基于...

28得票6回答
如何阻塞直到BlockingQueue为空?

我正在寻找一种方法,可以阻塞直到 BlockingQueue 为空。 我知道,在多线程环境中,只要有生产者向 BlockingQueue 中放置项目,就可能出现队列变空后几纳秒之后又被填满的情况。 但是,如果只有一个生产者,则它可能希望等待(并阻塞),直到在停止将项目放入队列后队列为空。 ...

14得票2回答
可调整大小的Java BlockingQueue

我正在一个生产者/消费者类型的应用程序中使用固定大小的阻塞队列 [ArrayBlockingQueue],但我希望用户能够随时更改队列大小。问题在于没有一个阻塞队列实现允许在创建后更改容量。有人遇到过这种情况吗?有什么建议吗?