Java支持多线程,Java也支持通过Process,ProcessBuilder和Runtime.exec()的多进程...
我清楚地知道线程和进程的定义,以及它们在os概念中的区别。
但我想知道为什么以及在什么情况下我们需要在Java应用程序中使用多进程而不是多线程?
答案 0 :(得分:8)
不一定将进程视为线程的替代品。 java中的进程是执行外部命令的便捷方式。它们在一般并行方案中并不是那么有用,因为它们启动和同步很麻烦。
它们的另一个好用途是隔离可能不会终止或导致堆栈溢出的本机代码(或任何其他无法控制的代码)。如果要在一个线程内运行它可能会导致整个过程失败。相反,你可以产生一个新的过程然后强行杀死它而不用担心它。
答案 1 :(得分:7)
最重要的是,使用processes
作为threads
的补充的原因可能是
尽管如此,在大多数应用程序中,threading
是出于内存原因,易于生成及其(相对)简单易用性的首选工具。
答案 2 :(得分:1)
当同步不是问题时,您可能需要它,即不干扰相同数据的进程,但您需要同时收集这些进程的输出,这意味着您需要并行运行它们是完全不同的过程。
答案 3 :(得分:1)
JVM中没有失控保护。
如果你有一个不会停止的线程,强行停止它的唯一方法就是让操作系统终止它的JVM。通过单独的进程,您可以保持应用程序的其余部分运行。
答案 4 :(得分:1)
这取决于,没有简单的答案。根据操作系统/ JVM,线程和进程可能意味着不同的东西,可能有不同的隔离级别。
为什么有能力同时使用? 以下是一个例子
考虑一种情况,您必须使用一些非线程安全的遗留或第三方本机(C ++)库(或不提供保证)。我想如果你必须简化你的服务器以利用大量的处理器。多进程架构会更合适。
<强>隔离强>
错误处理
答案 5 :(得分:0)
如果您需要运行不适用于JVM但可以使用o / s命令行运行的程序,则不能将其作为线程运行,而只能作为进程运行。