问题标签 [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.
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 的情况下从队列中获取这些图像???
java - BlockingQueue 与信号量
如果我们要实现一个资源池,比如数据库连接池。您将使用哪个并发集合?BlockingQueue
还是Semaphore
?
因为BlockingQueue
,就像生产者-消费者设计模式一样,生产者将所有连接放在队列中,消费者将从队列中获取下一个可用连接。
对于Semaphore
,您将信号量指定为池大小,并获取许可,直到达到池大小并等待其中任何一个释放许可并将资源放回池中。
哪一个更简单更容易?什么情况下我们只能使用一种而不能使用另一种?
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?请帮忙,因为我很困惑。
java - 带有 Boss-Worker 的 Java 线程
我必须做功课,我已经完成了一些代码,但有一些问题:
必须在 java 中创建一个 boss-workers 应用程序。
- 我有这些课程:
Main WorkerThread BossThread Job
基本上我想做的是,BossThread
持有 aBlockingQueue
并且工人去那里寻找Jobs
.
问题一:
目前我开始 5WorkingThreads
和 1 BossThread
。
主要的:
老板线程:
这是正常的,还是我应该WorkerThreads
在我的BossThread
?
问题2:
如您所见,我将队列分配给每个人WorkerThread
,这是合理的还是我只能将队列存储在一个地方?
问题 3:
我必须BossThread
以某种方式继续运行,只是为了等待用户是否将更多内容添加到队列中?以及我如何继续WorkerThreads
运行,从队列中寻找工作?
任何总体建议或设计缺陷或建议?
java - Java点对点线程模型,大家都在等Job
这是一门功课。我正在尝试创建点对点线程模型:
http://www.informit.com/articles/article.aspx?p=169479&seqNum=5
在委托模型有一个将任务委托给工作线程的老板线程的情况下,在对等模型中,所有线程都具有相同的工作状态。尽管有一个线程最初创建执行所有任务所需的所有线程,但该线程被视为工作线程并且不进行委托。在这个模型中,没有集中式线程。
因此,我的主线程将创建 5 个线程,它们开始监听我的队列并使用主线程创建作业 10 秒。而且由于所有线程都必须执行任务,因此该线程还必须等待作业。我怎样才能做到这一点?
所以我的主线程将与创建线程一起工作,而工作人员只是坐在queue.take()
.
我是否正确理解在点对点模型中,每个线程都必须queue.take()
或等待作业。如果是这样,我该怎么做?有什么建议么?
c# - 如何在 C# 的阻塞队列中获取当前正在运行的任务?
我想获取我在阻塞队列中添加的当前正在执行的任务,如何完成?
编辑:我正在使用这个优先级调度程序,并添加多个具有不同优先级的任务:
我想根据那里的优先级停止和恢复任务,例如,如果具有更高优先级的新任务到达,较低的停止并让任务执行,然后自行恢复......
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
java - 增加线程数量是否会使生产者消费者概率更快?
我使用无界链接阻塞队列实现了类似于消费者-生产者问题的东西。我让生产者将对象放入队列并让消费者接受它。当我测试程序时,每次试验的线程数量加倍,同时仍然处理相同数量的对象,所有试验的时间似乎是恒定的。它应该是恒定的吗?或者更多的线程意味着更快的处理?不确定是否是我的代码导致共享资源缓慢或同步。有任何想法吗?
c++ - 具有自定义阻塞队列实现的未解析外部符号
我创建了自己的阻塞队列,但在弄清楚为什么会出现链接器错误时遇到了一些麻烦(注意这是 Visual Studio 2010 中的 Qt 应用程序):
实现有点长,所以我有一个馅饼:http: //pastie.org/5368660
程序入口点如下所示:
我得到的链接器错误是:
我不明白为什么链接器找不到构造函数(也找不到任何其他方法BlockingQueue
)。有任何想法吗?
java - 如何检查重复项未添加到 LinkedBlockingQueue?
我正在使用 Java 邮件 API 接收来自多个 gmail 帐户的邮件。不同的帐户正在由不同的线程处理,我正在使用 aLinkedBlockingQueue
来存储电子邮件。但是,我不希望将相同的电子邮件重复添加到Queue
. 这是我到目前为止的代码:
我遇到的问题是在检查队列是否为空else
之后的块中。if
我希望它检查刚刚读入的消息集,并将这些消息与Queue
. 如果消息在,Queue
请不要再次添加。我不能简单地使用.contains()
,因为每次下载消息时,它们都会被赋予不同的内存位置,因此尽管Message
对象实际上可能是相同的(例如具有相同的主题、内容等),但它不会具有相同的签名(例如第一次下载它可能是Messagehgshsh676767
但下一次可能是Messageyyetwt8965
)。
我碰到了一堵砖墙,谁能建议一种方法来确保不添加重复项?