java中如何使用多线程和多进程方式运行多个阻塞的进程

概要

需求
首先我们需要同时运行多个相同的代码(代码中有单例),这个时候我们就想到了多个进程方式。 同时我们的这段代码又是阻塞的,于是又得借助多线程来实现。

整体架构流程

多进程

代码参考

public class ProcessBuilderTest {
    public static void main(String[] args) {
        List<String> params = new ArrayList<String>();
        params.add("java");
        params.add("-jar");
        params.add("ProcessJar.jar");
        params.add("args1");
        params.add("args2");
        params.add("args3");
 
        ProcessBuilder processBuilder = new ProcessBuilder(params);
//        System.out.println(processBuilder.directory());
//        System.out.println(processBuilder.environment());
        processBuilder.redirectErrorStream(true);
        try {
            Process process = processBuilder.start();
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            int exitCode = process.waitFor();
            System.out.println("exitCode = "+exitCode);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

这种情况就可以执行在主进程中,执行ProcessJar.jar子进程了。
但这个时候如果,加个for循环多次执行,就会有问题。
主进程会以阻塞的方式执行 Process process = processBuilder.start(); 如果ProcessJar.jar里面的代码是阻塞的,那第二个ProcessJar.jar就不会执行

多线程

这段代码来自ChitGPT, CSDN还是挺牛逼,有自己的GPT了,方便

ProcessBuilder pb = new ProcessBuilder("command");

Thread t = new Thread(new Runnable() {
    public void run() {
        try {
            pb.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});

t.start();

这时把for循环加到Thread t = new Thread(new Runnable() {外层后,就可以解决上面的问题了。

小结

主要知识点:
多进程:ProcessBuilder processBuilder = new ProcessBuilder(params);
多线程:Thread t = new Thread(new Runnable() {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_angT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值