草庐IT

【JavaEE】线程池

全部标签

java - 如何在多线程环境下更好的使用ExecutorService?

我需要创建一个库,其中包含同步和异步方法。executeSynchronous()-等到我有结果,返回结果。executeAsynchronous()-立即返回一个Future,如果需要,可以在完成其他事情后对其进行处理。我的库的核心逻辑客户将使用我们的库,他们将通过传递DataKey构建器对象来调用它。然后,我们将使用该DataKey对象构造一个URL,并通过执行它对该URL进行HTTP客户端调用,在我们将响应作为JSON字符串返回后,我们将该JSON字符串发送回我们的客户通过创建DataResponse对象。有些客户会调用executeSynchronous(),有些客户可能会调用

java - 非阻塞 I/O 与使用线程(上下文切换有多糟糕?)

我们在我工作的一个程序中经常使用套接字,我们有时同时处理来自多达大约100台机器的连接。我们有一个非阻塞的组合I/O与状态表一起使用来管理它和使用线程的传统Java套接字。我们在非阻塞套接字方面遇到了很多问题,我个人更喜欢使用线程来更好地处理套接字。所以我的问题是:在单个线程上使用非阻塞套接字可以节省多少?使用线程涉及的上下文切换有多糟糕?您可以扩展多少个并发连接以使用Java中的线程模型? 最佳答案 I/O和非阻塞I/O选择取决于您的服务器Activity配置文件。例如。如果您使用长期连接和数千个客户端,则I/O可能会因为系统资源

java - 线程中断未结束对输入流读取的阻塞调用

我正在使用RXTX从串口读取数据。读取是在以下列方式生成的线程中完成的:CommPortIdentifierportIdentifier=CommPortIdentifier.getPortIdentifier(port);CommPortcomm=portIdentifier.open("Whatever",2000);SerialPortserial=(SerialPort)comm;...settingsThreadt=newThread(newSerialReader(serial.getInputStream()));t.start();SerialReader类实现了Run

Java停放线程

Java中的停放线程和等待线程有什么区别?我有一个jboss核心转储,分析它显示有很多停放的线程。 最佳答案 看Javadocpark()方法:Disablesthecurrentthreadforthreadschedulingpurposesunlessthepermitisavailable.Ifthepermitisavailablethenitisconsumedandthecallreturnsimmediately;otherwisethecurrentthreadbecomesdisabledforthreadsch

Java Happens-Before 和线程安全

假设我有一个包装HashMap的类,如下所示:publicfinalclassMyClass{privatefinalMapmap;//CalledbyThread1publicMyClass(intsize){this.map=newHashMap(size);}//OnlyevercalledbyThread2publicfinalStringput(Stringkey,Stringval){returnmap.put(key,value);}//OnlyevercalledbyThread2publicfinalStringget(Stringkey){returnmap.get

java - 每个线程都有一个堆栈空间吗?

如果我理解正确的话,堆栈是用于局部基元和对堆中对象的引用。那么如果您有多个线程会怎样呢?它们是否同时共享相同的堆栈空间(但区域不同),或者JRE是否在线程之间切换时切换上下文并加载-卸载堆栈内容?或者JRE是否为每个线程分配单独的堆栈? 最佳答案 OrdoestheJREallocateseparatestacksforeachthreads?概念上是的。(例如,参见JVMspeclink。)规范的概念化如何在特定的JVM中实现是……实现特定的。但是,我的理解是当前一代(例如Hotspot)JVM将每个线程堆栈分配到操作系统请求的单

java - 我应该使用哪个 Java 集合来实现线程安全缓存?

我希望在不做太多工作的情况下(自然地)实现一个简单的缓存。在我看来,一个标准的Java集合应该就足够了,只需做一些额外的工作。具体来说,我正在存储来自服务器的响应,键可以是请求URL字符串或从URL生成的哈希码。我最初认为我可以使用WeakHashMap,但看起来该方法迫使我管理我想要保留的对象,以及我不管理的任何对象强引用立即被清除。我应该尝试使用SoftReference值的ConcurrentHashMap吗?或者这些也会被非常积极地清理掉吗?我现在正在查看LinkedHashMap类。通过一些修改,它看起来很有希望用于MRU缓存。还有其他建议吗?无论我使用哪个集合,我应该尝试手

java - 在两个线程和主程序之间共享一个对象

我是Java新手,正在参加并发编程类(class)。我拼命地尝试获得一个最小的工作示例,它可以帮助演示我学到的概念,例如使用“同步”关键字和跨线程共享对象。一直在寻找,但找不到一个基本的框架。Java程序员,请帮忙。 最佳答案 一个简单的例子。希望你喜欢足球(或橄榄球)。:)publicclassGame{publicstaticvoidmain(String[]args){BallgameBall=newBall();RunnableplayerOne=newPlayer("Pasha",gameBall);Runnablepla

java - 在运行时更改 JMeter 中测试计划的线程数

我想在运行时更改JMeter测试计划的线程数。我用Google搜索了我的问题并找到了使用JMeter插件的建议解决方案。但是在这个解决方案中,我必须在运行测试计划之前安排线程组,这是我不想要的。我还找到了anotherpotentialsolution这会更改属性,但不会影响运行时的测试计划行为。最终,我要做的是更改线程组中给定的线程数,并让它立即增加或减少当前运行的测试计划中的线程数。这可能吗? 最佳答案 恕我直言,这只是一个花哨的功能,在进行适当的性能测试时并没有真正的好处。为了生成相关的测试输出(报告),你需要repeatab

java - OpenJDK开发JavaEE?

我正在开发一个JavaEE应用程序并将其部署在Glassfish3中。我正在使用Ubuntu12.04、面向EE开发人员的Eclipse和OpenJDK6JDK(包openjdk-6-jdk)。到目前为止没有问题。问题是,无论我在哪里寻找有关使用OpenJDK进行JavaEE开发的信息,我都发现OpenJDK应该只是JavaSE,例如here,或here.不过,在我的应用程序中,我经常使用javax.*,并且可以正常工作。我已经下载了OpenJDK6的源代码,我发现文件夹/jdk/src/share/classes/javax/有很多类,但是缺少一些重要的东西,比如javax.serv