草庐IT

阻塞队列

全部标签

java - 如何使用 MQQueueConnectionFactory 连接到多实例队列管理器

我们有一个应用程序需要与多实例队列管理器通信。两个(实例)都在默认端口上运行并具有唯一地址。serverA.internal.company.addressserverB.internal.company.address我们使用下面的代码来建立ConnectionFactory:MQQueueConnectionFactoryconnectionFactory=newMQQueueConnectionFactory();connectionFactory.setTransportType(1);connectionFactory.setPort(1414);connectionFact

java - 如果 ExecutorService 的队列已满会发生什么

我有一个高达TB的大文件,我的任务是逐行处理。每行需要5秒才能完成。为了提高性能,我将进程分派(dispatch)到这样的固定线程池ExecutorServiceexecutor=Executors.newFixedThreadPool(5);while((line=br.readLine())!=null){Runnableworker=newWorkerThread(line);executor.execute(worker);}我的问题是,如果我放置如此多的任务使执行程序的队列不堪重负,会发生什么情况。它会抛出StackOverflow吗? 最佳答案

Java 并发 - 应该阻塞还是让步?

我有多个线程,每个线程都有自己的私有(private)并发队列,它们所做的只是运行一个无限循环,从中检索消息。可能有一个队列在一段时间内(可能几秒钟)没有收到消息,而且它们可能会大量涌入,因此需要快速处理。我想知道在第一种情况下最适合做什么:使用阻塞队列并阻塞线程直到我有更多输入或执行Thread.yield()?我希望在给定时间有尽可能多的CPU资源可用,因为并发线程的数量可能会随着时间的推移而增加,但我也不希望消息处理落后,因为无法保证当执行yield()时线程将被重新安排执行。我知道硬件、操作系统和其他因素在这里起着重要作用,但抛开这些并从Java(JVM?)的角度来看,什么是最

连接到服务器时 Java 套接字阻塞

我正在尝试使用Java套接字连接到服务器。我正在尝试从端口80连接到90intport;Socketclientsocket;Stringhostname="www.google.com";for(port=80;port当我尝试连接到任何网站(如google.com或w3schools.com)时,我的程序在socket()调用端口号(80除外)时挂起。由于这些网站不在端口81-90上提供服务,因此它应该引发异常,但它却被阻止了。对于端口80,它工作正常。当我尝试连接到安装在我机器上的apache服务器时,它不会阻止任何端口号并给我连接拒绝错误,这是显而易见的行为。那么为什么会这样。

java - ExecutorService,如何在不阻塞主线程的情况下知道所有线程何时完成?

我有一个多线程实现,我在其中创建一个ExecutorService并提交要执行的任务,我想知道所有线程何时提交都已完成而不阻塞主线程和UI。我试过ExecutorService.awaitTermination()但它会阻塞主线程和UI。我搜索了很多,但我似乎无法找到一种优雅的方式来做到这一点。我目前正在考虑创建另一个线程来计算已完成线程的数量并在它们全部完成时启动一个事件,但这不是一个好方法,我想要一个更好的解决方案! 最佳答案 使用SwingWorker关闭线程池并调用awaitTermination()。这将防止UI阻塞并从您

java - 并发/非阻塞控制台键盘输入

我正在用Java开发MUD。我每次都读取播放器输入,但我使用的是Scanner,它使用阻塞操作。我想要非阻塞输入。我看过nio包,它有一个Selector类,但我不确定如何将它用于System.in。我想一旦我运行服务器我肯定会需要它,但现在一切都处于离线状态。我已经尝试从Applet扩展主类并覆盖keyDown,但这只是意味着在第一个输入之后不再接受输入。当然,我不再阻止任何东西,但是没有更多的输入。keyDown我猜再也没有被调用过。也许线程即使在执行阻塞操作时也可以被中断?感谢您对此问题的任何见解。 最佳答案 你不能用系统控制

java - Tomcat 6.0.28 在浸泡测试期间由于线程阻塞而无响应

我们对在Tomcat6.0.28和OpenJDK运行时环境(IcedTea61.11.11)上运行的新版JavaEEWeb应用程序进行了多次浸泡测试。问题出现在web层。一段时间后-第一次50分钟,第二次1小时,第三次2.5小时-我们集群Web层中的一个随机Tomcat停止响应。查看线程转储,我们看到大量线程突然阻塞。当问题发生时,线程数从93增加到437。437个线程中的341个在WebappClassLoader上被阻塞,如下所示:"TP-Processor400"daemonprio=10tid=0x00007f1ee432e800nid=0x44d9waitingformoni

java - 修复了线程池线程阻塞,当提交了足够多的任务时

我有一个流程需要并行计算许多小任务,然后按任务的自然顺序处理结果。为此,我进行了以下设置:一个简单的ExecutorService和一个阻塞队列,当Callable提交给执行程序时,我将使用它来保持返回的Future对象:ExecutorServiceexec=Executors.newFixedThreadPool(15);LinkedBlockingQueue>futures=newLinkedBlockingQueue>(15*64);一些调试代码,用于计算提交的数量和已处理的任务数量,并定期将它们写出来(注意processed在任务代码本身的末尾递增):AtomicLongpr

Java Serializable、ObjectInputstream、非阻塞 I/O

我刚刚开始使用Java序列化,我不清楚在非阻塞I/O的情况下您应该如何从源获取对象。我能找到的所有文档都建议使用ObjectInputStream是读取序列化对象的正确方法。但是,正如我提到的,我正在使用java.nio并执行非阻塞操作。如果readObject()将阻塞直到有新对象可用,这对我没有帮助总结..使用JavaNIO时如何进行序列化? 最佳答案 将序列化实例包装在一个报告有效负载长度的协议(protocol)中,有效负载就是所讨论的实例。然后,一旦您知道您有一个表示完整实例的段,您就可以安全地使用ObjectInputS

java - SelectorImpl 被阻塞

我用了很多客户端向服务器发送请求,一个客户端每秒大约1000个请求,服务器的CPU很快就升到600%(8核),并一直保持这种状态。当我使用jstack打印流程内容时,发现SelectorImpl是BLOCKED状态。记录如下:nioEventLoopGroup-4-1prio=10tid=0x00007fef28001800nid=0x1dbfwaitingformonitorentry[0x00007fef9eec7000]java.lang.Thread.State:BLOCKED(onobjectmonitor)atsun.nio.ch.EPollSelectorImpl.doS