【发布时间】:2013-06-25 16:28:04
【问题描述】:
如果我的 java 程序想要在不同时间使用线程执行多个 perl 脚本。每个线程是否应该拥有自己的 ProcessBuilder 和 Process 对象的副本?
我在想线程都可以共享 ProcessBuilder,但是我不太确定。
【问题讨论】:
标签: java multithreading process processbuilder
如果我的 java 程序想要在不同时间使用线程执行多个 perl 脚本。每个线程是否应该拥有自己的 ProcessBuilder 和 Process 对象的副本?
我在想线程都可以共享 ProcessBuilder,但是我不太确定。
【问题讨论】:
标签: java multithreading process processbuilder
如果您的ProcessBuilder 的所有参数始终相同(即您始终使用相同的参数调用相同的脚本),您可以在所有线程中使用相同的ProcessBuilder,并且只需要确保它被正确地发布到那些线程。
通常,如果您在创建和设置ProcessBuilder 之后开始您的线程,您会没事的。
如果不同的线程需要对 ProcessBuilder 进行更改(或者如果您在线程启动之后对构建器进行更改),您将需要同步这些更改 - cf the javadoc:
请注意,此类不同步。如果多个线程同时访问
ProcessBuilder实例,并且至少有一个线程在结构上修改了其中一个属性,则它必须在外部同步。
在这种情况下,每个线程使用一个实例可能会更容易。
【讨论】: