在多线程Java程序中,每个线程是否都有其自己的System.out副本?
我正在编写一个多线程Java程序,其中每个线程可能都需要将其标准输出重定向到一个单独的文件。每个线程都有其自己的文件。是否可以在“每个线程”的基础上重定向System.out或在所有线程上全局更改System.out?
回答:
是否可以基于“每线程”重定向System.out
不,这是不可能的。
System.out
是静态的,并且在JVM最初启动时,每个JVM都会作为系统类加载器的一部分进行加载。尽管当然建议对每个线程使用适当的日志记录调用,但是我认为有一些原因您无法执行此操作。System.out
以这种方式使用的可能是第三方库或其他代码。
您可以做的一件事(作为一个激进的建议)是使您自己的PrintStream
委派给ThreadLocal<PrintStream>
。但是您将需要@Override
应用程序调用的适当方法,以使其按线程工作。
最后,如果你问这个是因为你担心的并发,System.out
是PrintStream
所以它已经是synchronized
在幕后,并可以被多个线程安全地使用。
以上是 在多线程Java程序中,每个线程是否都有其自己的System.out副本? 的全部内容, 来源链接: utcz.com/qa/412835.html