如果我的java程序想要使用线程在不同时间执行多个perl脚本。每个线程是否应该拥有自己的ProcessBuilder
和Process
对象的副本?
我当时认为线程可以共享ProcessBuilder但是,我不太确定。
答案 0 :(得分:2)
如果ProcessBuilder
的所有参数始终相同(即您总是使用相同的参数调用相同的脚本),则可以使用相同的{{1在所有线程中,只需要确保它正确发布到这些线程。
通常情况下,如果您在创建并设置ProcessBuilder
之后启动线程,那么您将没事。
但是,如果不同的线程需要对ProcessBuilder
进行更改(或者在线程启动后更改构建器) ),您需要同步这些更改 - 参见the javadoc:
请注意,此类未同步。如果多个线程同时访问
ProcessBuilder
实例,并且至少有一个线程在结构上修改了其中一个属性,则必须在外部进行同步。
在这种情况下,每个线程使用一个实例可能会更容易。