问题标签 [blockingqueue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
716 浏览

java - Java ScheduledExecutorService生产者\消费者

我有下一个项目:

基于 Spring(3.2) 的 Web 应用程序(Tomcat 7),在后台我有几个任务。

我有一个队列,其中包含一些要处理的信息。该队列会定期更新(但只是在它为空时)。

此外,我有几个线程定期从这个队列和进程中排队数据。

对于调度,我想使用 ScheduledExecutorService。

我有几个问题\问题:

  1. 如何保持这个队列?我认为它应该是全球性的。我应该在某个“持有人”类中使其成为静态吗?这不会是一个糟糕的设计吗?

  2. 用 ScheduledExecutorService 初始化这个队列和所有任务的好地方在哪里?ServletContextLoadingListener 是一个好地方吗?有什么方法可以用 Spring 初始化它吗?

  3. 如果我需要精确控制消费者线程的数量,是否应该使用多个 ScheduledExecutorService 实例?

  4. ArrayBlockingQueue 对这种情况有好处吗?

0 投票
6 回答
27297 浏览

java - 如何阻塞直到 BlockingQueue 为空?

我正在寻找一种方法来阻止直到 aBlockingQueue为空。

我知道,在多线程环境中,只要有生产者将项目放入BlockingQueue.

但是,如果只有一个生产者,那么在它停止将项目放入队列后,它可能想要等待(并阻塞)直到队列为空。

Java/伪代码:

你有什么主意吗?

编辑:我知道包装BlockingQueue和使用额外的条件可以解决问题,我只是问是否有一些预制的解决方案和/或更好的替代方案。

0 投票
0 回答
139 浏览

java - ServletContextAttributeListener 中的 BlockingQueue

我正在尝试将数据(从在 ServletContextListener 中启动的线程不断向队列中添加数据)传输到 ServletContextAttributeListener。

队列中的数据需要传递给连接的客户端,这些客户端在“attributeReplaced”上得到通知。

数据包含在 BlockingQueue 中。

但是我有点困惑;如果我通过调用将 BlockingQueue 放置在上下文中

问题:上下文是否包含此队列的副本或指针?

因为如果它只复制队列,那么将队列添加到上下文是没有意义的,对吧?或者你会用另一种方式解决这个问题吗?

托马斯。

0 投票
4 回答
2880 浏览

java - Java中的持久阻塞队列?

TL;博士; 我需要知道是否有一个具有持久阻塞队列的库。

我有一个经典的生产者/消费者计划。他们共享一个LinkedBlockingQueue来共享数据,而我BlockingQueue#take在 Consumers 中使用方法,因为我需要他们永远活着等待新的元素。

问题是我有很多数据而且我不能丢失它们。即使在消费者停止之后,生产者也可以坚持生成一些数据。我正在考虑H2在达到某个阈值后实现我的 BlockingQueue ta 用于存储/获取数据。我的主要问题是我需要性能,并且我需要按照元素的创建顺序来使用它们。

是否有一个持久阻塞队列的实现可以用于这样的事情?如果没有,我有什么建议可以实现这样的目标吗?

0 投票
2 回答
223 浏览

java - 由于 BlockingQueue.take(),Java VM 未关闭

我的应用程序启动了一个使用阻塞队列的守护线程。当使用 kill -3 杀死它时,应用程序不会完全停止,并且生成的堆栈显示它仍在等待BlockingQueue.take()

任何有助于彻底关闭的建议将不胜感激

0 投票
4 回答
177 浏览

java - Java,阻塞队列

我一直在阅读有关阻塞队列的内容,并且出现了某些问题。我读过的所有例子都只展示了只有一个消费者和一个生产者线程的情况。问题是:假设我们有 1 个生产者和 3 个消费者,并且在当前时刻,所有消费者都被调用了 take() 方法,但是队列是空的,所以他们都在等待出现第一个元素。哪个消费者线程会在第一个元素出现时获取它?首先调用 take() 的消费者线程?

0 投票
3 回答
806 浏览

java - BlockingQueue 并从等待中释放线程

假设我有 BlockingQueue 并且一些线程被称为 take() 但此时队列是空的。并且假设我以某种方式知道将来新元素不会出现在队列中。如何从等待中释放那些被称为 take() 的线程?谢谢!

其中 kitchen.getFromProcessedOrders() 等于:

和 processesOrders 是一个 BlockingQueue

0 投票
4 回答
1503 浏览

java - 生产者-消费者(许多)。消费者获取并放入共享队列

我做了一个生产者-消费者计划。它只是核心 java 中的一个程序,没有任何 GUI(Swing 或 SWT)。它有一个将对象放入队列的生产者。还有一些消费者必须将一些人员(例如字符串)添加到该共享队列中的每个对象中。因此,每个消费者都必须处理共享队列中的每个对象。在这种情况下 - 每个 BookShelf 都必须在“books”ArrayList 中包含来自所有消费者的项目。消费者。

问题:我应该在消费者中使用什么条件来正确完成他们的线程?以下是程序的代码片段。也许我以错误的方式实施它。

这是队列的对象:

}

这是生产者类:

}

这是消费者类之一:

这是主要课程:

0 投票
2 回答
196 浏览

java - 同步 BlockingQueues 的 ArrayList

在 Java 中,我需要一个ArrayList60LinkedBlockingQueue秒的对象。将60秒ArrayList在程序的开头,同时仍然是单线程的。然后一个线程将到s 而另一个线程将。是否需要显式同步此对象?.add()LinkedBlockingQueue.add()LinkedBlockingQueue.poll()

0 投票
1 回答
284 浏览

java - 使用 ArrayBlockingQueue 和 mutex 的多线程代码中的疑点

我正在尝试编写多线程代码。但说真的,我不明白我可以从哪里开始。我的头也在敲。请帮我。

我的任务是,

  1. 有一个长度为 1 的队列,称为pending_tasks,其中包含需要一些处理的任务。
  2. 还有另一个长度为 1 的队列,称为completed_tasks,其中包含完成处理并准备交付的任务。

我的实现思路,

  1. 首先制作两个阻塞队列,pending_tasks然后completed_tasks
  2. 一个线程(生产者)总是监听来自外部的任务,如果被放入pending_tasks.
  3. 一个线程(消费者)始终准备好从中获取任务pending_tasks并开始处理,然后放入completed_tasks.
  4. 然后又来了pending_tasks,每当有任务来的时候,就开始同样的处理。
  5. 基本上,它是一个单一的生产者 - 单一的消费者问题。

我的困惑,

我知道它可以通过使用 ArrayBlockingQueue 和 Mutex 来编写代码。但我不明白我该如何开始。我对互斥锁有很好的理解,我从这个链接中了解了互斥锁,并且对阻塞队列也有很好的理解,因为我在这个网站上阅读了很多问题。

能否请您给我一些实现指导,以便我可以编写这个多线程代码。

我已经为此编写了一些代码,但这并没有达到我任务的最终目标。

提前致谢。寻找您的友好答复。

编辑编号 1

请看我下面的代码。此代码工作正常,但此代码缺少一个功能。请帮我补充一下,提供一些指导。

功能是,

  1. 当生产者线程在pending_task队列中放入一些值时,它会在那里等待一段时间。如果在那个时候消费者将结果提供给消费者,那么它就可以了。否则,它说超时,生产者获取另一个值并将其放入pending_task队列中,并且相同的过程开始。

请帮助我添加上述功能。我认为我们必须在生产者线程和消费者线程之间进行通信,而线程通信是通过使用互斥体完成的(我认为)。请帮我实现同样的

我的代码,

多线程类

生产者类

消费类

送货员班

测试班