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

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

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

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

27得票5回答
可变延迟的ScheduledExecutorService

假设我有一个任务,需要从java.util.concurrent.BlockingQueue中获取元素并对其进行处理。public void scheduleTask(int delay, TimeUnit timeUnit) { scheduledExecutorService.sc...

23得票4回答
Java中类似于Go channel的东西是什么?

我有一个需求,需要从一组阻塞队列中读取数据。这些阻塞队列是由我使用的库创建的。我的代码必须从这些队列中读取数据。我不想为每个阻塞队列创建一个读取线程。相反,我希望使用单个线程(或最多使用2/3个线程)轮询它们以检查是否有可用的数据。由于某些阻塞队列可能长时间没有数据,而另一些队列可能会突然出现...

21得票5回答
将任务添加到ThreadPoolExecutor的BlockingQueue中是否可行?

针对JavaDoc中ThreadPoolExecutor的说明不明确,无法确定直接向支持执行器的BlockingQueue添加任务是否可以接受。然而文档中提到,调用executor.getQueue()主要用于调试和监控。 我使用自己的BlockingQueue构建了一个ThreadPool...

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

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

20得票3回答
BlockingQueue的drainTo()方法的线程安全性

BlockingQueue的文档说明批量操作不是线程安全的,但并未明确说明drainTo()方法。 BlockingQueue实现是线程安全的。所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。但是,除非在实现中另有说明,在addAll、containsAll、reta...

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

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

14得票4回答
在Java中实现自己的阻塞队列

我知道这个问题之前已经被问过和回答了很多次,但我只是找不到一个在互联网上找到的例子中使用的技巧,比如这个或者那个。 这两种解决方案都检查阻塞队列的数组 / 队列 / 链表的空置,以便在put()方法中通知所有等待线程,并在get()方法中相反地执行。第二个链接中的评论强调了这种情况,并提到这...

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

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