草庐IT

阻塞队列

全部标签

java - System.out.println 最终阻塞

我有一个应用程序将其所有日志记录合并到一个单实例类中,以便于选择性调试打印等。该类已经存在了一年左右,运行顺利,但就在最近我碰巧打开了日志升级到最高设置(我很少这样做),标准输出似乎最终会阻塞。这会在下次代码的其他部分调用println时,或者当它尝试使用日志记录类(它被阻止等待println返回)时造成严重破坏。我的第一个想法是我的日志记录类存在某种并发问题,但是搜索堆栈跟踪让我确信我的同步工作正常并且在任何给定时间只有一个线程尝试写入控制台.这是有问题的线程上的示例堆栈跟踪:Thread[Thread-127](Suspended)FileOutputStream.writeByt

java - RabbitMQ 暂停队列消费

保留持久队列及其绑定(bind)但暂停其消费者的最佳方法是什么?用例是:如果我们不断收到一堆我们无法处理的消息(例如数据库已关闭或模式问题),我想“让它崩溃”并停止处理消息,但我想继续聚合到队列中。即允许发布但暂停消费。我可以想到三种解决方案:我可以让绑定(bind)到队列的所有消费者不断拒绝消息并重新排队,但这是一种资源浪费,更不用说我已经以编程方式执行上述逻辑。我可以对所有消费者调用basic.cancelConsumer(见下文)或以spring-amqp表示我想我可以在所有SimpleMessageListenerContainers上调用shutdown绑定(bind)到队列

java - JMS 队列接收消息?

在JMSAPI文档中,它说:publicMessagereceive()throwsJMSExceptionReceivesthenextmessageproducedforthismessageconsumer.Thiscallblocksindefinitelyuntilamessageisproducedoruntilthismessageconsumerisclosed.Ifthisreceiveisdonewithinatransaction,theconsumerretainsthemessageuntilthetransactioncommits.这里我有三个问题:1.在

java - Camel 和 JMS 以正确的顺序从高级队列中消费消息

我在将ApacheCamel与OracleAdvancedQueues和JMS结合使用时遇到问题。这是关于分发消息的应用程序。在Camel的帮助下,消息在OracleAdvancedQueues中接收和排队。然后它们被Camel消耗并转发到目标系统。对于消息传递失败的情况,在AdvancedQueue中定义了一个重试次数,使消息重新传递。如果Camel现在将消息出列并将其发送到不可用的目标系统,则会抛出HttpOperationFailedException或NoSuchEndpointException。这些被捕获并执行回滚。此时,期望按照重试计数中定义的频率重试消息传递,然后将其移

java - 队列的同步

我一直在阅读DougLea的“Java并发编程”一书。您可能知道,Doug最初编写了Java并发API。但是,有些事情让我有些困惑,我希望就这个小难题获得一些意见!从DougLea的排队示例中获取以下代码...classLinkedQueue{protectedNodehead=newNode(null);protectedNodelast=head;protectedfinalObjectpollLock=newObject();protectedfinalObjectputLock=newObject();publicvoidput(Objectx){Nodenode=newNod

java - 使用优先级队列的 Prims 算法的复杂性?

我用的是邻接矩阵,优先队列是数据结构。根据我的计算,复杂度是V^3logV:While循环:V检查相邻顶点:V如果条目已经存在则检查队列,并更新相同的条目:Vlogv但是,我到处都读到复杂度是V^2请解释。 最佳答案 如果你使用斐波那契堆,那么提取最小值是O(lgV)摊余成本并更新其中的条目是O(1)摊销。如果我们使用这个伪代码whilepriorityQueuenotemptyu=priorityQueue.exractMin()foreachvinu.adjacenciesifpriorityQueue.contains(v)a

java - SecureRandom.getInstance ("SHA1PRNG", "SUN") 总是阻塞而 new SecureRandom() 不是?

我想咨询一些关于Java中SecureRandom的常见神话、安全与性能权衡的问题。在网上查了一段时间,整理了以下资料。我希望这里的人能帮助我确认我得到了什么,并希望对实际选择实现的内容有一些想法。基本上这里有一些关于SecureRandom的最受欢迎和最详尽的文章:正确使用Java的SecureRandom:https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/使用Java的SecureRandom时的问题:https://www.synopsys.com/blogs/sof

java - Spring AMQP RabbitMQ 实现优先级队列

谷歌几天后,我相信我完全迷路了。我想实现一种具有大约3个队列的优先级队列:高优先级队列(每日),需要首先处理。中等优先级队列(每周),如果队列#1中没有项目,它将处理。(这个队列中的消息没问题,它根本不会处理)低优先级队列(每月),如果队列#1和#2中没有项目,它将处理。(这个队列中的消息没问题,它根本不会处理)最初我有以下流程,让消费者消费来自所有三个队列的消息并检查队列#1、#2和#3中是否有任何项目。然后我意识到这是错误的,因为:我完全迷失了一个问题:“我怎么知道它来自哪个队列?”。我已经在使用来自任何队列的消息,所以如果我从较低优先级队列中获取一个对象,如果我发现较高优先级队列

java - 并发队列 - 一般问题(描述和用法)

我在理解并发队列的概念时遇到了一些困难。我了解队列是一种FIFO,即先到先得的数据结构。现在当我们添加并发部分时,我将其解释为线程安全(如果不正确,请告诉我)事情变得有点模糊。并发性是指各种线程可以添加到队列或从队列中删除(服务项目)的方式?并发是否为该操作提供了一种有序感?我将非常感谢对并发队列功能的一般描述。类似的帖子here并不像我希望的那样一般。还有并发优先级队列这种东西吗?它的用途是什么?非常感谢有关此主题的任何简短解释或有用链接。 最佳答案 BlockingQueue提供很少开销的概念有点误导。获取锁会调用相当大的开销。

java - 同步部分不阻塞!

昨天我注意到一些非常奇怪的事情。看起来两个线程正在同时进入锁定在同一个对象上的两个同步块(synchronizedblock)。包含相关代码的类(MyClass)看起来与此类似:privatestaticint[]myLock=newint[0];protectedstaticintmethodA(finallonghandle,finalbyte[]sort){synchronized(myLock){returnxsMethodA(handle,sort);}}protectedstaticintmethodB(finallonghandle){synchronized(myLoc