草庐IT

阻塞队列--LinkedBlockingQueue

全部标签

java - 使用后台线程与使用消息队列

我目前正在研究一系列警报,这些警报将检查来自外部网络服务的响应状态,并根据响应对象的状态(例如超时、无效数据等)发送警报。我希望主线程在评估响应和发送警报时继续工作。我有两个立即可用的选项:使用ActiveMQ并将对象作为objectMessage发送到队列进行处理。使用命令模式并线程化处理警报的异步命令。它们对我来说都是不错的选择,但我更倾向于线程命令,因为我不需要消息队列的大部分功能。问题:您将如何决定使用哪个?为什么? 最佳答案 两个字:保证交付。如果这对您很重要,那么消息队列就是您想要的。

java - BufferedInputStream 和阻塞

我正在使用BufferedInputStream从套接字中读取数据。BufferedInputStream内容如下:socketInput.read(replyBuffer,0,7);它被实例化socketInput=newBufferedInputStream(mySocket.getInputStream());mySocket被定义为privateSocketmySocket;mySocket由mySocket=newSocket(ipAddress,port);实例化我已验证mySocket已连接到我的设备。我可以向我的设备发送数据;但是,由于未知原因,我没有从我的设备接收到信

java - Hazelcast 队列信息

我目前正在使用hazelcast编写分布式系统。我有几个关于使用hazelcast实现的队列的问题。处理队列中数据的最佳方法是什么?我目前在每个“节点”上都有线程读取阻塞队列处理数据。这是正确的还是有一些我不知道的类负责处理这个问题,比如JMS或messageListener?我看到有一个生存时间设置,一旦过期就会从队列中删除条目。我的问题是......有没有办法检测从队列中删除过期项目?我知道有Listener但这无济于事,因为它在所有“节点”上触发,而不仅仅是一个。我正在寻找一种为每条过期消息执行代码的方法(类似于死信队列)。如有任何意见或建议,我们将不胜感激。谢谢

java Process.waitfor 是一个阻塞调用

我希望能够从JVM内部启动外部进程并完成它。我可以使用ProcessBuilder创建一个流程,然后执行Process.waitFor()以等待其完成。然而,这是一个阻塞调用,只会浪费线程资源。通过事件处理程序和响应式编程来完成此操作会更有意义。人们会认为JVM可以向操作系统注册某种监听器来监听进程完成事件,并将其转发回程序。是否存在这样的机制/API?有没有实现此目的的替代方案或库? 最佳答案 使用NuProcess如果您只需要支持Windows、MacOSX和Linux,请使用该库。它使用回调模型提供对外部进程的非阻塞访问——包

Java 优先级队列比较器

我已经为优先级队列定义了自己的比较函数,但是比较函数需要数组的信息。问题是当数组的值改变时,它并没有影响比较函数。我该如何处理?代码示例:importjava.util.Arrays;importjava.util.Comparator;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassMain{publicstaticfinalintINF=100;publicstaticint[]F=newint[201];publicstaticvoidmain(String[]args){PriorityQueue

java - 如何找到 horneq 队列长度

我正在使用Hornetq2.0,我不明白我怎么知道此刻队列中有多少消息。这是一个非常有用的功能,因此我可以在运行时知道我的消费者是否足够快地消费消息。我没有使用JMSapi,而是使用高度优化的核心API。获取队列中消息数量的正确(最快)方法是什么?我找到了2种方法,但不知道什么是正确的方法。publicintsize(){ClientSessionsession;try{session=sf.createSession(false,false,false);ClientRequestorrequestor=newClientRequestor(session,"hornetq.mana

java - 在应用程序引擎任务队列(JAVA)中传递多个参数

有没有办法在google-app-engine的队列中传递多个参数?我使用下面的代码Queuequeue=QueueFactory.getQueue("sms-queue");queue.add(TaskOptions.Builder.url("/SQ").param("id",pId));在我的servlet中,这个id作为查询字符串被检索。longpID=Long.parseLong(req.getParameter("id"));我需要传递6个参数。 最佳答案 你试过这样做吗:queue.add(TaskOptions.Bui

java - 队列满错误,与多个消费者、生产者一起工作

我想模拟以下场景:多个消费者,生产者线程正在修改一些数据作为设置BlockingQueueq1=newSynchronousQueue();BlockingQueueq2=newSynchronousQueue();ProducerdataProducer=newProducer(q1);//publishtoq1Filter1filter1=newFilter1(q1,q2);//readfromq1,publishtoq2Filter2filter2=newFilter2(q2);//readfromq2newThread(dataProducer,"Producer-Thread

java - 为什么 java 的 inputstream.close() 会阻塞?

我的Java程序使用ProcessBuilder(将redirectErrorStream设置为true)并有一个循环来运行进程的输入流的读取方法,这是阻塞的。然后我调用的外部程序停止等待输入和标准输入。我现在想杀死这个过程。这不是通过(在单独的线程中)调用进程的destroy方法,并调用inputstream的close方法来停止read方法阻塞来完成的,这样我的初始线程就可以结束它的生命了吗?由于某些原因process.getInputStream().close()block。从JavaDoc我不明白为什么会发生这种情况。此外,我不明白为什么javadoc说“InputStrea

Java 事件队列。我什么时候应该考虑使用它?

我目前正在查看Oracle网站上的EventQueue类:http://download.oracle.com/javase/1.4.2/docs/api/java/awt/EventQueue.html但是我不确定什么时候应该使用它?如果我的类(class)有两个或更多事件的监听器,我应该使用它吗? 最佳答案 通常您不必向EventQueue提交任何事件,当用户执行他的操作(如鼠标点击等)或系统认为您的窗口需要重新绘制时,这一切都会“自动”发生。我经常使用的仅有的两种方法是EventQueue.invokeLater和EventQ