Ajuda com Subprocesso e Thread

Galera fiz um código que cada chamada de subprocesso é executado por uma Thread diferente, mas que executam o mesmo método com mesmo parâmetros . Téria como chamar esses subprocessos usando Thread mas passando comandos diferentes ? Exemplo abrir a calculadora e o cmd , ou programas diferentes e etc ? Alguém poderia me dá uma força ?

Classe Principal do Programa

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public final class UsandoThreadComSubprocessos {

    public void execute() {

        ExecutorTask task = new ExecutorTask(); // Criando um objeto tipo ExecutorTask
        Thread executorThread = new Thread(task); //Criando uma thread para executar o Executor
        executorThread.start(); //Executando a Thread

    }

    public static void main(String[] args) {

        new UsandoThreadComSubprocessos().execute();//Iniciando uma thread
        new UsandoThreadComSubprocessos().execute();//Iniciando uma Segunda Thread

    }

}

class ExecutorTask implements Runnable {

    @Override
    public void run() {

        Process process = null; //Criando uma variavel tipo process

        try {

            process = Runtime.getRuntime().exec("cmd /c calc"); //Atribuindo um método que chama um subprocesso a uma variavel process
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); //Capturando o Retorno do processo solicitado
            String line = "";

            while ((line = reader.readLine()) != null) { //Lendo o retorno do processo atribuido a variavel line
                System.out.println(line);// Mostrando o resultado na tela

            }

            process.waitFor(); //

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            return;
        }
    }
}

Uma das formas seria você passar por parâmetro o comando que você deseja executar pelo ExecutorTask, algo desse tipo:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public final class UsandoThreadComSubprocessos {

    public void execute(String comando) {

        ExecutorTask task = new ExecutorTask(comando); // Criando um objeto tipo ExecutorTask
        Thread executorThread = new Thread(task); //Criando uma thread para executar o Executor
        executorThread.start(); //Executando a Thread

    }

    public static void main(String[] args) {

        new UsandoThreadComSubprocessos().execute("cmd /c mstsc");//Iniciando uma thread
        new UsandoThreadComSubprocessos().execute("cmd /c calc");//Iniciando uma Segunda Thread

    }

}

class ExecutorTask implements Runnable {

	private String comando;
	
    public ExecutorTask(String comando) {
		this.comando = comando;
	}

	@Override
    public void run() {

        Process process = null; //Criando uma variavel tipo process

        try {

            process = Runtime.getRuntime().exec(comando); //Atribuindo um método que chama um subprocesso a uma variavel process
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); //Capturando o Retorno do processo solicitado
            String line = "";

            while ((line = reader.readLine()) != null) { //Lendo o retorno do processo atribuido a variavel line
                System.out.println(line);// Mostrando o resultado na tela

            }

            process.waitFor(); //

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            return;
        }
    }

	public String getComando() {
		return comando;
	}

	public void setComando(String comando) {
		this.comando = comando;
	}
    
}

Implementei aqui funcionou.