问题标签 [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 回答
548 浏览

java - 如何使用阻塞队列在后台处理相机源?

在处理“面部检测”的 android 应用程序中的相机馈送时,我遇到了一个问题。

我正在尝试做的事情:

-我有一个活动,它在 SurfaceView(UI 线程)中连续显示手机摄像头馈送

- 为了避免性能问题,我在顶部放置了一个表面视图,以使用 OpenCv 在检测到的面上绘制矩形(这是在线程中运行,比如线程 2)

- 我正在尝试将 Direct feed 图像的副本传递给 Thread2,以便线程 2 可以进行检测并在覆盖表面视图上绘图

我现在在哪里:

-我正在考虑使用带有阻塞队列的线程,以便 UIthread 可以使用 BlockingQueue.add(..) 将图像放入 BlockingQueue 中,并且 Thread2 可以在 BlockingQ 中获取图像,对其进行处理并在后台检测人脸

条件: 我希望UI线程,不要等待,以便在显示器上看到统一的提要。它只需要放置图像,然后无需等待其他任何东西,它就可以去获取下一个提要并重复该过程

目前我正在使用一个实现 Runnable 接口的新类,它有两个方法 putImage(bitmap) 和 getImage() 使用blockingQueue.putImage()放置和获取图像由UIthread调用,getImage()由thread2调用

问题: 当我继续将图像放入阻塞队列时,Thread2 无法访问blockingQ(Itsblocked)并且由于UI线程应该不间断地运行,我不能在主线程中调用wait()或sleep()。

Thread2 有什么方法可以在不阻塞 MainThread 的情况下从队列中获取这些图像???

0 投票
3 回答
4836 浏览

java - BlockingQueue 与信号量

如果我们要实现一个资源池,比如数据库连接池。您将使用哪个并发集合?BlockingQueue还是Semaphore

因为BlockingQueue,就像生产者-消费者设计模式一样,生产者将所有连接放在队列中,消费者将从队列中获取下一个可用连接。

对于Semaphore,您将信号量指定为池大小,并获取许可,直到达到池大小并等待其中任何一个释放许可并将资源放回池中。

哪一个更简单更容易?什么情况下我们只能使用一种而不能使用另一种?

0 投票
1 回答
1948 浏览

java - java.util.concurrent.LinkedBlockingQueue 不是先进先出?

java.util.concurrent.LinkedBlockingQueue的简要描述说它是一个FIFO队列,这意味着如果线程A首先将一堆条目(a1,a2,...an)添加到队列中,然后线程B再添加一些东西进入队列(b1,b2,... bm),然后一些消费者线程应该在从 B 获取这些条目之前耗尽 A 中的所有条目(因此是 FIFO)。但我所看到的是,来自 A 的条目和来自 B 的条目是交错的,即使 B 添加其条目的时间比 A 晚得多。我正在对一些 Tomcat + Jersey 应用程序进行代码审查,它使用单例LinkedBlockingQueue加上少数异步工作线程来处理来自客户端的请求条目。

我质疑代码的公平性,因为迟到的请求必须在队列中等待,直到早期的条目全部用完(客户端可以为每个请求提交数千个条目),但令我惊讶的是,迟到的客户得到了他们的回应几乎立即回来。那么这是否意味着LinkedBlockingQueue不是FIFO?请帮忙,因为我很困惑。

0 投票
1 回答
1061 浏览

java - 带有 Boss-Worker 的 Java 线程

我必须做功课,我已经完成了一些代码,但有一些问题:

必须在 java 中创建一个 boss-workers 应用程序。

  1. 我有这些课程:Main WorkerThread BossThread Job

基本上我想做的是,BossThread持有 aBlockingQueue并且工人去那里寻找Jobs.

问题一:

目前我开始 5WorkingThreads和 1 BossThread

主要的:

老板线程:

这是正常的,还是我应该WorkerThreads在我的BossThread?

问题2:

如您所见,我将队列分配给每个人WorkerThread,这是合理的还是我只能将队列存储在一个地方?

问题 3:

我必须BossThread以某种方式继续运行,只是为了等待用户是否将更多内容添加到队列中?以及我如何继续WorkerThreads运行,从队列中寻找工作?

任何总体建议或设计缺陷或建议?

0 投票
4 回答
1256 浏览

java - Java点对点线程模型,大家都在等Job

这是一门功课。我正在尝试创建点对点线程模型:

http://www.informit.com/articles/article.aspx?p=169479&seqNum=5

在委托模型有一个将任务委托给工作线程的老板线程的情况下,在对等模型中,所有线程都具有相同的工作状态。尽管有一个线程最初创建执行所有任务所需的所有线程,但该线程被视为工作线程并且不进行委托。在这个模型中,没有集中式线程。

因此,我的主线程将创建 5 个线程,它们开始监听我的队列并使用主线程创建作业 10 秒。而且由于所有线程都必须执行任务,因此该线程还必须等待作业。我怎样才能做到这一点?

所以我的主线程将与创建线程一起工作,而工作人员只是坐在queue.take().

我是否正确理解在点对点模型中,每个线程都必须queue.take()或等待作业。如果是这样,我该怎么做?有什么建议么?

0 投票
1 回答
504 浏览

c# - 如何在 C# 的阻塞队列中获取当前正在运行的任务?

我想获取我在阻塞队列中添加的当前正在执行的任务,如何完成?

编辑:我正在使用这个优先级调度程序,并添加多个具有不同优先级的任务:

我想根据那里的优先级停止和恢复任务,例如,如果具有更高优先级的新任务到达,较低的停止并让任务执行,然后自行恢复......

0 投票
3 回答
5928 浏览

java - 在 Java 中实现多消费者多生产者的问题

我写了一个简单的消费者-生产者问题,它有一个阻塞队列,有多个生产者,多个消费者获取和放入队列中的整数。但是,当我尝试对其进行测试时,结果并不理想,例如队列的大小不正确。我不认为消费者和生产者的规模是同步的。此外,我对生产者和消费者都设置了 2 秒的睡眠时间,但在测试时,它每两秒打印出 2 个生产者和 2 个消费者的结果。有谁知道我做错了什么?也许我启动线程错误?我评论了另一种方法,但结果仍然是错误的。

结果:

制片人

消费者

测试

UPDATE: I tried to implement the reentrant lock but my program stops at the lock line. Any help? Consumer

Producer

MyBlockingQ (shared resouce)

Test

0 投票
3 回答
894 浏览

java - 增加线程数量是否会使生产者消费者概率更快?

我使用无界链接阻塞队列实现了类似于消费者-生产者问题的东西。我让生产者将对象放入队列并让消费者接受它。当我测试程序时,每次试验的线程数量加倍,同时仍然处理相同数量的对象,所有试验的时间似乎是恒定的。它应该是恒定的吗?或者更多的线程意味着更快的处理?不确定是否是我的代码导致共享资源缓慢或同步。有任何想法吗?

0 投票
1 回答
355 浏览

c++ - 具有自定义阻塞队列实现的未解析外部符号

我创建了自己的阻塞队列,但在弄清楚为什么会出现链接器错误时遇到了一些麻烦(注意这是 Visual Studio 2010 中的 Qt 应用程序):

实现有点长,所以我有一个馅饼:http: //pastie.org/5368660

程序入口点如下所示:

我得到的链接器错误是:

我不明白为什么链接器找不到构造函数(也找不到任何其他方法BlockingQueue)。有任何想法吗?

0 投票
2 回答
2604 浏览

java - 如何检查重复项未添加到 LinkedBlockingQueue?

我正在使用 Java 邮件 API 接收来自多个 gmail 帐户的邮件。不同的帐户正在由不同的线程处理,我正在使用 aLinkedBlockingQueue来存储电子邮件。但是,我不希望将相同的电子邮件重复添加到Queue. 这是我到目前为止的代码:

我遇到的问题是在检查队列是否为空else之后的块中。if我希望它检查刚刚读入的消息集,并将这些消息与Queue. 如果消息在,Queue请不要再次添加。我不能简单地使用.contains(),因为每次下载消息时,它们都会被赋予不同的内存位置,因此尽管Message对象实际上可能是相同的(例如具有相同的主题、内容等),但它不会具有相同的签名(例如第一次下载它可能是Messagehgshsh676767但下一次可能是Messageyyetwt8965)。

我碰到了一堵砖墙,谁能建议一种方法来确保不添加重复项?