Имеет ли смысл создавать процесс из потока в Java? - PullRequest
0 голосов
/ 08 октября 2019

Интересно, имеет ли смысл case2 ниже код в Java или нет. Цель состоит в том, чтобы просто создать несколько процессов. Например, мы хотим создать 5 процессов.

public class TestProcess {

  public static void main(String[] args) throws IOException {
    TestProcess tp = new TestProcess();
    tp.createProcess();          // case 1
    tp.createProcessViaThread(); // case 2
  }

  void createProcess() throws IOException {
    for (int i = 0; i < 5; i++) {
      System.out.println("start process i = " + i);
      ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "a.sh");
      ...
      Process process = pb.start();
    }
  }
  void createProcessViaThread() {
    Job job = new Job();
    ExecutorService executorService = Executors.newFixedThreadPool(50);

    for (int i = 0; i < 5; i++) {
      String fName = "file_" + i;
      executorService.execute(() -> {
        try {
          job.compute(fName);
        } catch (IOException e) {
          e.printStackTrace();
        }
      });
    }
  }

}

public class Job {
  public void compute(String fname) throws IOException {
      System.out.println("start process via thread fname = " + fname);
      ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "a.sh");
      Process childProcess = pb.start();
  }
}

, когда мы хотим создать несколько процессов, мы используем случай 1, который непосредственно создает процесс с использованием ProcessBuilder.

Мой вопрос - случай2, который создаетпроцессы из потока является общим случаем?

Если это так,

1) в чем преимущество случая 2 над case1?

2) каков случай использования case2?

Я не видел кода, подобного case2, который создает поток, а затем каждый поток создает процесс. Но я видел этот код сегодня. вот почему я спрашиваю. Я спросил человека, который написал код, почему написал код, подобный случаю 2, и услышал, что они создают несколько процессов одновременно и сразу, без ожидания, что не имеет смысла для меня.

1 Ответ

0 голосов
/ 08 октября 2019

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

В чем преимущество случая 2 над case1?

Нет

каков вариант использования case2?

Если программе на Java нужно дождаться завершения процесса, а затем выполнить некоторое последующее наблюдение, тогда вариант 2есть заслуга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...