2016-03-18 3 views
1

Мне интересно, можно ли запустить процесс и запустить ли он код из текущей программы в Java, аналогичный fork() в C. Что мне нужно сделать:Запуск процесса из строки кода в Java

public void someMethod() { 
    doStuff(); 
} 

public static void main(String[] args) { 

    /* start someMethod() in separate process */ 

    doOtherStuff(); 
} 

Чтобы уточнить, я НЕ хочу запускать someMethod() из отдельного файла, как это делает ProcessBuilder и т. Д., Я хочу, чтобы он был из строки кода, если это имеет смысл.

ПРИМЕЧАНИЕ: это концептуальный вопрос, связанный с Java, то есть, пожалуйста, не спрашивайте: «Почему бы вам не запустить someMethod() в потоке?»

+0

Java использует потоки, а не процессы, поэтому вы можете запускать 'someMethod()' в потоке. Нить лучше, чем процесс практически во всех отношениях (буквально каждый раз), поэтому нет необходимости включать отдельный API процесса. – markspace

+0

«нить лучше процесса» - нет, если я намеренно хочу другое адресное пространство для моей программы :) – user3927950

+0

что вы на самом деле пытаетесь решить здесь? почему вы не можете достичь этого, используя потоки? зачем беспокоиться об адресном пространстве в ** Java **? – BeyelerStudios

ответ

0

Невозможно запустить процесс и запустить метод в java так, как вы хотите, поскольку java использует потоки.

Чтобы запустить его в отдельный процесс, вы можете скомпилировать код как отдельное приложение и вызвать его с помощью процесса api.

+1

Или погрузитесь в C/C++ через JNI и используйте 'fork()' :) – Shark

+0

Так это связано с тем, что он работает на уровне JVM? Я не совсем понимаю, почему C/C++ может достичь этого, но Java не может – user3927950

+0

Да .. насколько я знаю, многопоточность Java была построена поверх pthread. Thread предоставляет много возможностей. Они легкие, могут обмениваться памятью, что было бы трудно достичь через процесс. –

Смежные вопросы