我有一堆添加到的生产者线程BlockingQueue
和一个接收对象的工作线程。现在,我想扩展它,以使两个工作线程可以接收对象,但是对对象执行不同的工作。这是一个转折:
我希望 两个 接收线程都处理已放在队列中的对象。
如果我继续使用BlockingQueue,则两个线程将争用对象,只有一个工作线程将获取对象。
因此,我正在寻找类似于BlockingQueue的东西,但是具有广播行为。
应用程序:生产者线程实际上是在创建性能度量,并且其中一个工作线程正在将度量写入文件,而另一个工作线程正在汇总统计信息。
我正在使用Java 6。
这样的机制存在吗?在Java SE中?别处?还是我需要自己编写代码?
我正在寻找占地面积小的解决方案-我不希望安装一些框架来做到这一点。
一种选择:具有 三个 阻塞队列。您的主要生产者将项目放入“广播”队列。然后,您拥有 该 队列的使用者, 该
使用者消耗每个项目,并将其放入其他两个队列中,每个队列都由一个使用者进行服务:
Q2
---- Real Consumer 1
Q1 /
Producer ---- Broadcast Consumer
\
---- Real Consumer 2
Q3
另外,您可以给生产者两个阻塞队列,然后让它把它生产的项目放入两个队列中。这不太优雅,但总体上稍微简单一些:)
问题内容: 也许这是一个愚蠢的问题,但我似乎找不到一个明显的答案。 我需要一个仅包含唯一值的并发FIFO队列。尝试添加队列中已经存在的值只会忽略该值。如果不是为了线程安全,那将是微不足道的。在Java中是否存在数据结构,或者在Interweb上是否存在代码snipit表现出这种行为? 问题答案: 如果您想要比完全同步更好的并发性,那么我知道有一种方法可以使用ConcurrentHashMap作为支
问题内容: 我有一个经典的问题,线程将事件推送到第二个线程的传入队列。仅这次,我对性能非常感兴趣。我要实现的是: 我想要并发访问队列,生产者推送,接收者弹出。 当队列为空时,我希望消费者阻止队列,等待生产者。 我的第一个想法是使用,但是我很快意识到它不是并发的,并且会降低性能。另一方面,我现在使用,但仍要为每个出版物支付/ 的费用。由于使用者在找到空队列时不会阻塞,因此我必须进行同步并处于锁定状态
我们正在构建一个具有Node.js服务器和Express的架构体系。 在服务器中,发生的情况如下所示: 服务器接受来自客户端的传入HTTP请求 服务器生成两个文件(此操作可能“相对较长”,也就是0.1秒左右) 服务器将生成的文件(每个文件约20-200 KB)上载到外部CDN 服务器响应客户机,这包括CDN上文件的URI 目前,服务器正在为每个请求按顺序执行此操作,并且效果非常好(Node/Exp
本文向大家介绍Java并发编程之阻塞队列详解,包括了Java并发编程之阻塞队列详解的使用技巧和注意事项,需要的朋友参考一下 1、什么是阻塞队列? 队列是一种数据结构,它有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素。阻塞队里与普通的队列的区别在于,普通队列不会对当前线程产生阻塞,在面对类似消费者-生产者模型时,就必须额外的实现同步策略以及线程间唤醒策略。使用阻塞队列,就会对当前
我正在使用parallelStream并行上传一些文件,有些是大文件,有些是小文件。我注意到并不是所有的工人都被使用。 一开始一切都运行良好,所有线程都被使用(我将并行选项设置为16)。然后在某一点上(一旦它到达更大的文件),它只使用一个线程 简化代码: uploaderPool是一个ArrayBlockingQueue。日志: 似乎所有的工作(列表中的项目)都分布在16个线程中,委托给一个线程的
我想在Redis中实现一个并发优先级队列,不同机器上的多个进程添加项目(带分数),多个其他进程弹出这些项目,最先得分。 可以使用LPUSH和RPOP实现简单队列。 使用ZSET,我可以使用ZADD添加项目,并使用ZRANGE和ZREM弹出它们,只要只有一个读取器。 对于多个读者,我想我需要像ZPOP这样的东西,它将ZRANGE和ZREM结合在一个原子操作中。否则,两个阅读器可能会在ZREM之前从Z