草庐IT

【JavaEE】线程池

全部标签

java - 如何等待产生自己线程的线程?

我正在尝试测试一种在单独的线程中工作的方法,简化后如下所示:publicvoidmethodToTest(){Threadthread=newThread(){@Overridepublicvoidrun(){Clazz.i=2;}};thread.start();}在我的单元测试中,我想测试Clazz.i==2,但我不能这样做,因为我认为断言在线程更改值之前运行。想过换个线程测试一下,然后用join等待,还是不行。中南合作:@Testpublicvoidsscce()throwsInterruptedException{Threadthread=newThread(){@Overri

java - Jetty websocket客户端类WebSocketClient线程安全吗?

jetty9.3Java8org.eclipse.jetty.websocket.client.WebSocketClient线程安全吗。多个线程可以使用此类的单个实例来创建websocketsession(使用connect方法)吗? 最佳答案 不是,来自thecode这里至少有一个例子:WebSocketClient的目的是提供一种与远程websocket端点建立连接的方法。这是通过调用返回FutureSession的connect()方法实现的。好吧,现在想象一下线程1实例化一个WebSocketClient并调用setCoo

java - Erlang 比单线程 Java 快之前需要多少个 CPU

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭9年前。Improvethisquestion我目前正在使用Java,我在网上阅读了很多关于Erlang的内容,但我有两个大问题:Erlang比简单的Java慢多少(如果有的话)?我在这里假设Java会比shootoutbenchmarks更快。在网上(Erlang做的不太好)。那么,我还需要多少CPU才能使Erlang超越单线程Java(在我的特定情况下,如下所示)?在阅读了一段时间关于Erlang的文章后,我偶然发现了一些评论/帖子,它们说大多数

java - 如何在多线程之间共享一个事务

我们遇到了一个使用多线程的场景。在主线程中,做一些逻辑和更新数据库,在某个时刻,它会调用另一个服务来更新数据库,该服务在另一个线程中运行。我们希望两个线程共享同一个事务,也就是说,任何一个线程中的操作失败,那么另一个线程中的操作也会被回滚。但是工作了几天,发现有帖子说JTA不支持多线程。目前我们使用Bitronix作为JTA提供者,有没有人知道Bitronix是否支持一个事务中的多线程?还是有任何其他JTA提供者支持这个(独立的JTA提供者不是J2EE容器)? 最佳答案 “多个线程可能同时与同一个全局事务相关联。”-JTA规范v1.

java - 在 Java 中,对空闲线程使用 Thread.sleep(1) 是否有效?

我的线程中有一个主循环,其中一部分测试空闲boolean值是否为真。如果是,它将在每次循环迭代时调用Thread.sleep(1)。这是一种有效的方法吗?我的目标是让线程在空闲时占用最少的CPU。 最佳答案 没有。使用Object.wait相反,并确保您在包含boolean值的对象上同步。如果您不同步并且boolean不是volatile,您就没有内存屏障,因此无法保证轮询线程会看到对的更改boolean值。根据javadoc:Thismethodcausesthecurrentthread(callitT)toplaceitsel

Java vs C# 多线程性能,为什么 Java 变慢了? (包括图表和完整代码)

我最近一直在Java和C#上运行基准测试,以在线程池上安排1000个任务。服务器有4个物理处理器,每个处理器有8个内核。操作系统为Server2008,内存为32GB,每个CPU为Xeonx7550Westmere/Nehalem-C。简而言之,Java实现在4个线程时比C#快得多,但随着线程数的增加而慢得多。当线程数增加时,C#似乎每次迭代都变得更快。图表包含在这篇文章中:Java实现是在64位HotspotJVM上编写的,使用Java7并使用我在网上找到的ExecutorService线程池(见下文)。我还将JVM设置为并发GC。C#是在.net3.5上编写的,线程池来自codep

java - 如果您只有一个写线程,您是否需要特殊的并发性?

假设:只有一个特定的线程曾经设置过某个引用字段(不是long或double,所以写入它是原子的)可以有任意数量的线程读取同一个字段稍微过时的读取是可以接受的(最多几秒钟)在这种情况下,您是否需要volatile或AtomicReference或类似的东西?Thisarticle状态:Memorybarriersarenotrequiredifyouadherestrictlytothesinglewriterprinciple.这似乎表明,在我描述的情况下,您真的不需要做任何特别的事情。所以,这是我运行的测试,结果很奇怪:importorg.junit.Test;publicclass

java - 多线程修改StringBuilder

我问的问题与DifferencebetweenStringBuilderandStringBuffer有关但不一样。我想看看如果StringBuilder同时被两个线程修改会发生什么。我编写了以下类:publicclassThreadTester{publicstaticvoidmain(String[]args)throwsInterruptedException{RunnablethreadJob=newMyRunnable();ThreadmyThread=newThread(threadJob);myThread.start();for(inti=0;i最初我在StringCo

java - 有没有办法确保将线程分配给指定的一组对象?

我们正在开发一个应用程序,其中一组对象可以通过接收来自3个不同来源的消息来影响。每条消息(来自任何来源)都有一个对象作为其目标。每个消息接收者都将在自己的线程上运行。我们希望消息的处理(接收后)尽可能高速,因此针对目标对象的消息处理将由线程池中的另一个线程完成。消息的处理将比读取/接收来自发件人的消息花费更长的时间。我在想,如果池中的每个线程只专用于一组特定的对象,它会更快,例如:Thread1->objectsnamedA-LThread2->objectsnamedM-Z每组对象(或线程)都有专门的消息队列等待处理。我的假设是,如果唯一需要的线程同步是在每个接收线程和一个处理线程之

java - Glassfish线程池问题

我们使用的是Glassfish3.0.1,响应时间非常长;对于25%的POST/PUT请求,大约需要5分钟,当响应返回时,前置负载均衡器已经超时。我的理论是请求正在排队等待可用线程。我认为这是因为访问日志显示请求需要几秒钟才能完成,但执行请求的时间比我预期的晚了五分钟。有没有人对调试线程池的运行情况有任何建议?或者最适合他们的设置是什么?是否需要定期进行线程转储,还是一次性转储就足够了? 最佳答案 乍一看,这似乎与线程池本身关系不大。在不太了解网络设置的其余部分的情况下,我会检查以下几点:负载平衡器池中是否有死机/无响应节点?这可能