从Java执行批处理

从Java执行批处理,java,batch-file,Java,Batch File,比方说 我有一个Java类JavaClass1.Java。我正在从这个Java类执行2个批处理文件。 每个.bat文件启动另一个Java应用程序。 假设另外两个应用程序每个都需要15个小时才能完成,而且它们也不相互依赖 我怎样才能解决这个问题。我不必等待一个完成,所以我必须 开始另一个,我也可以同时做 我发现人们在谈论handelling outputstream、inputstream和error stream,如果我 等待错误处理,然后我必须为每个错误等待15个小时。我不想那样做 有办法吗?

比方说

我有一个Java类JavaClass1.Java。我正在从这个Java类执行2个批处理文件。 每个.bat文件启动另一个Java应用程序。 假设另外两个应用程序每个都需要15个小时才能完成,而且它们也不相互依赖

我怎样才能解决这个问题。我不必等待一个完成,所以我必须 开始另一个,我也可以同时做

我发现人们在谈论handelling outputstream、inputstream和error stream,如果我 等待错误处理,然后我必须为每个错误等待15个小时。我不想那样做


有办法吗?请建议。谢谢

将启动每个.bat的机制放在自己的线程中,然后启动每个线程

    new Thread(new Runnable() {
        @Override
        public void run() {
            //Launch first bat.
        }
    }).start();

    new Thread(new Runnable() {
        @Override
        public void run() {
            //Launch second bat.
        }
    }).start();

将启动每个.bat的机制放在它自己的线程中,然后启动每个线程

    new Thread(new Runnable() {
        @Override
        public void run() {
            //Launch first bat.
        }
    }).start();

    new Thread(new Runnable() {
        @Override
        public void run() {
            //Launch second bat.
        }
    }).start();
只需使用运行时执行服务,若您不调用process.waitFor()来获取进程的返回代码,它不会阻塞,所以您可以立即调用下一个应用程序。若您想从应用程序返回代码,请在每个线程上以Mike的身份运行应用程序


只需使用运行时执行服务,若您不调用process.waitFor()来获取进程的返回代码,它不会阻塞,所以您可以立即调用下一个应用程序。若您想从应用程序返回代码,请在每个线程上以Mike的身份运行应用程序

处理线程怎么样?我需要担心吗?我编辑了一些代码。我只是使用匿名类。显然不用担心。我不必在创建线程后销毁线程。对不起,我不太了解线程。或者你能解释一下上面代码片段的后果吗?Java会对它进行垃圾收集,所以你不必破坏它。线程将在run()完成后消亡。每个调用start()都将依次进行。它将启动一个新线程,与控制的主线程分离,并继续其工作。主函数将完成,JVM将阻塞,直到线程完成。然后主线程将终止。如何处理线程…我需要担心吗?我编辑了一些代码。我只是使用匿名类。显然不用担心。我不必在创建线程后销毁线程。对不起,我不太了解线程。或者你能解释一下上面代码片段的后果吗?Java会对它进行垃圾收集,所以你不必破坏它。线程将在run()完成后消亡。每个调用start()都将依次进行。它将启动一个新线程,与控制的主线程分离,并继续其工作。主函数将完成,JVM将阻塞,直到线程完成。然后主线程将终止。你能解释一下它什么时候会阻塞,什么时候不会阻塞。。。我想执行.bat,它将启动另一批。我可以这样做,它不会阻塞。请解释一下,因为我是新来的。当您使用Runtime.exec(…)创建一个新的子进程时,它会返回一个进程对象,如果您想知道子进程返回代码,您必须等待它退出,为此,只需使用您收到的进程对象调用waitFor()。waitFor()将导致调用此方法的线程阻塞util子进程结束。你有两个相互独立的应用程序,如果你不需要听这些程序的退出代码,只要不调用waitFor(),你就不会被阻止,到时候可以立即调用下一个exec。你能解释一下它什么时候会被阻止,什么时候不会被阻止。。。我想执行.bat,它将启动另一批。我可以这样做,它不会阻塞。请解释一下,因为我是新来的。当您使用Runtime.exec(…)创建一个新的子进程时,它会返回一个进程对象,如果您想知道子进程返回代码,您必须等待它退出,为此,只需使用您收到的进程对象调用waitFor()。waitFor()将导致调用此方法的线程阻塞util子进程结束。你有两个相互独立的应用程序,如果你不需要听这些程序的退出代码,只要不调用waitFor(),你就不会被阻塞,到时候可以立即调用下一个exec。