在多线程Java程序中,每个线程是否都有其自己的System.out副本?

我正在编写一个多线程Java程序,其中每个线程可能都需要将其标准输出重定向到一个单独的文件。每个线程都有其自己的文件。是否可以在“每个线程”的基础上重定向System.out或在所有线程上全局更改System.out?

回答:

是否可以基于“每线程”重定向System.out

不,这是不可能的。

System.out是静态的,并且在JVM最初启动时,每个JVM都会作为系统类加载器的一部分进行加载。尽管当然建议对每个线程使用适当的日志记录调用,但是我认为有一些原因您无法执行此操作。System.out以这种方式使用的可能是第三方库或其他代码。

您可以做的一件事(作为一个激进的建议)是使您自己的PrintStream委派给ThreadLocal<PrintStream>。但是您将需要@Override应用程序调用的适当方法,以使其按线程工作。

最后,如果你问这个是因为你担心的并发,System.outPrintStream所以它已经是synchronized在幕后,并可以被多个线程安全地使用。

以上是 在多线程Java程序中,每个线程是否都有其自己的System.out副本? 的全部内容, 来源链接: utcz.com/qa/412835.html

回到顶部