Запускать несколько процессов одного класса с помощью ProcessBuilder - PullRequest
0 голосов
/ 16 декабря 2018

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

try {       
        ProcessBuilder customer = new ProcessBuilder("java.exe","-cp","bin","lab_3.Customer");
        Process runCustomer = customer.start();

        runCustomer.waitFor();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

1 Ответ

0 голосов
/ 16 декабря 2018

Метод 1, клонирование

Я не знаю, насколько это хорошая идея, но вы можете попробовать сделать что-то вроде этого:

ProcessBuilder customer = new ProcessBuilder("java.exe","-cp","bin","lab_3.Customer");
Process runCustomer = customer.clone().start();

.clone () сделаетскопируйте его, а затем начните процесс с него.Теперь вы можете сделать:

ProcessBuilder customer = new ProcessBuilder("java.exe","-cp","bin","lab_3.Customer");
Process runCustomer1 = customer.clone().start();
Process runCustomer2 = customer.clone().start();
Process runCustomer3 = customer.clone().start();
Process runCustomer4 = customer.clone().start();

Метод 2, массив аргументов

Также вы можете хранить свои аргументы в массиве, и каждый раз, когда вы захотите начать новый Process, вы простосоздайте новый экземпляр ProcessBuilder, например так:

String command = "java.exe";
String[] args = new String[]{ "-cp", "bin", "lab_3.Customer" };

for(int i = 0; i < numOfProcesses; i++) {
     new ProcessBuilder(command, args).start();
}

И вот так, если вам нужно сохранить созданные Processes:

String command = "java.exe";
String[] args = new String[]{ "-cp", "bin", "lab_3.Customer" };
Process[] processes = new Process[numOfProcesses];

for(int i = 0; i < numOfProcesses; i++) {
     processes[i] = new ProcessBuilder(command, args).start();
}
...