草庐IT

Multithreading

全部标签

java - 从未分配为 null 的 volatile 变量是否可以包含 null?

可以在以下概念性Java示例中:publicclassXimplementsRunnable{publicvolatileObjectx=newObject();@Runnablepublicvoidrun(){for(;;){Thread.sleep(1000);x=newObject();}}}x曾被另一个线程读取为null吗?奖励:我是否需要将其声明为volatile(我并不真正关心该值,它足以在将来的某个时候成为新分配的值并且永远不会为null) 最佳答案 从技术上讲,是的。这是原始ConcurrentHashMap'sre

java - Apache Http 客户端打印 "[read] I/O error: Read timed out""

我正在使用apachehttp客户端v4.5并将其用作REST客户端。在某些情况下,我发现一个错误“[读取]I/O错误:读取超时”,它来自httpclient框架,当它读取接收到的内容并将其显示为最后一条消息时。它似乎没有影响,但是我想知道是否有人知道它来自哪里以及如何解决它。根据以下线程(link),这似乎是“多线程”配置的问题。但是我只使用http客户端的默认配置,当我使用版本v4时,我不知道如何将“多线程”设置为false以查看它是否有任何区别。我也尝试设置超时,但没有帮助。有什么提示吗?日志:15:48:05.984[main]DEBUGorg.apache.http.wire

java - 如何从多个线程记录数据?

大量线程连续并行运行(让我们假设这个连续部分)。所有线程都想记录一些应用程序数据,基本上是一组值。记录这些数据的最佳方法是什么?单个/多个文件?备份此日志的最佳方法是什么?从备份文件中读取数据并将其转换为有用的东西的方法是什么?多个线程,如this和this建议使用log4net和log4j,但我想知道实际过程?还有多个线程如何写入同一个日志文件?每个线程都需要文件级锁吗?这一切是如何运作的?任何有助于理解所有细节的指示都将不胜感激。谢谢。 最佳答案 像log4j这样的库将能够根据您的需要进行配置。拆分成太多文件会使调试某些问题变得

java - 混合使用 Log4j 和 commons-logging 会导致 "class loading deadlock"?

我想我发现了一种情况,其中log4ja)直接混合使用和b)通过commons-logging混合使用会导致某种类加载死锁。我不确定这种情况是否可能发生(JVM不应该检测到这种情况吗?)以及如何应对。问题在我们的构建系统中,我们目前正在按顺序运行我们的单元测试-为了加快构建速度,我们显然可以更改它以并行运行我们的单元测试。但是,如果我们这样做,某些构建会遇到执行超时。在分析此类“挂起构建”的线程转储时,我们发现自己处于不同的模块中,大部分时间涉及不同的测试。但它总是归结为两个尝试初始化Logger的线程:一个使用Logger.getLogger(直接使用log4j),另一个使用LogFa

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

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

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

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

Java ThreadPoolExecutor 在使用 ArrayBlockingQueue 时卡住

我正在开发一些应用程序并使用ThreadPoolExecutor来处理各种任务。ThreadPoolExecutor在一段时间后卡住。为了在更简单的环境中对此进行模拟,我编写了一个能够模拟该问题的简单代码。importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.RejectedExecutionHandler;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;publicclassMy

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 - 多线程修改StringBuilder

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