【问题标题】:Multiple execution of a ProcessBuilder in a Java program在 Java 程序中多次执行 ProcessBuilder
【发布时间】:2014-06-15 13:20:32
【问题描述】:

我想在一个 Java 程序中使用ProcessBuilder,它会在同一个程序中多次使用。 此代码 sn-p 会检查数据库中的每条记录。如果只有一条记录满足开始时间/结束时间等约束,那么我没有任何问题,但如果两条记录满足这些约束中的任何一个,那么第一个记录,它会执行 processbuilder 中的命令并将输出重定向到日志文件。记录第二条记录,它不执行 processbuilder 中的命令并将输出重定向到相同的日志文件。在这个网站上有一个关于这个问题的类似问题,在下面的链接中没有得到回答。我希望至少现在有人会解决这个问题并给我们一个解决方案。我真的不明白我在哪里做错了。任何对这个概念有想法的人请回复这个问题,让我知道我做错了什么。

multiple processbuilder in a programme

while(rs1.next())
        {
            instance_id = rs1.getString(1);
            startdate = rs1.getString(2);
            starttime = rs1.getString(3);
            endtime = rs1.getString(4);
            enddate = rs1.getString(5);
            if(presentdate.equals(startdate) || presentdate.equals(enddate))
            {
                if(presenttime.equals(starttime))
                {
                    String[] s1 = new String[]{"cmd", "/c","ec2-start-instances",instance_id,">>","D:\\logfile.log"};
                    ProcessBuilder builder1 = new ProcessBuilder(s1);
                    Process p1 = builder1.start();
                }
                else if(presenttime.equals(endtime))
                {
                    String[] s1 = new String[]{"cmd", "/c","ec2-stop-instances",instance_id,">>","D:\\logfile.log"};
                    ProcessBuilder builder1 = new ProcessBuilder(s1);
                    Process p1 = builder1.start();
                }
            }
        }

【问题讨论】:

    标签: java processbuilder


    【解决方案1】:

    我建议你使用

    p1.waitFor();
    

    在启动另一个线程之前将此线程与子进程同步,尤其是当它们有共同的资源 (D:\logfile.log) 时。

    【讨论】:

    • 感谢先生的回复。但是我不能让这个过程等待,因为我的程序必须在一分钟内检查不是单个表而是来自 4 个表的所有记录,如果在那个特定时间安排了任何记录,则重新加载。有没有其他方法可以解决这个问题??
    • 因此,例如,如果当时安排了 100 条记录,实际上不可能在一分钟内等待每条记录。请建议我如何解决这个问题。
    • 您可能需要从进程中读取标准输出,这可能需要每个执行进程一个线程。 OTOH,可以生成包含所有 cmd 调用的单个脚本,并在迭代 DB 关系 (rs1) 后,将其作为单个子进程执行。
    • 但是,我认为检查我的建议(即等待)是否能避免您报告的问题会很有启发性。然后继续使用其他选项之一。
    • 谢谢先生,p.waitFor();帮助我获得所需的输出,但需要几秒钟才能完全加载页面。对于较少的记录,此过程非常有效。但正如我提到的,如果同时安排 100 条记录,那么在一分钟内加载全部内容将是一个问题。
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2017-03-07
    • 2012-07-11
    • 2012-03-11
    相关资源
    最近更新 更多