2010-08-13 3 views
0

Скажем,Выполнение партии из Java

У меня есть класс Java JavaClass1.java.I уверен, выполнение 2 пакетных файлов из этого класса Java. В каждом .bat-файле запускается другое Java-приложение. Допустим, что эти два других приложения занимают 15 часов каждый, чтобы завершить, и они также не зависят друг от друга.

Как решить эту проблему. Мне не нужно ждать, пока он завершится, так что я должен выполнить , но я могу сделать это одновременно.

Я нашел людей, говорящих о передаче меток выходного потока, входного потока и потока ошибок, если ядождитесь ошибок для обработки, тогда я должен ждать 15 часов для каждого. Я не хочу этого делать.

Есть ли способ? Пожалуйста, предложите. Спасибо

ответ

2

Поместите механизм для запуска каждого .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(); 
+0

как насчет обработки нитей ... Я должен беспокоиться об этом? – user234194

+0

Я отредактировал, чтобы добавить код. Я просто использовал анонимные классы. Так что, видимо, не стоит беспокоиться. – Mike

+0

dont Мне нужно уничтожить нить, как только я создал. извините за вопрос, но я не знаю много о потоках. или вы могли бы объяснить о последствиях этого фрагмента кода. – user234194

1
Runtime.getRuntime().exec(new String[]{"cmd","/c","java -jar app1.jar"}); 
Runtime.getRuntime().exec(new String[]{"cmd","/c","java -jar app2.jar"}); 

Просто используйте время выполнения выполнить обслуживание, если вы не звоните process.waitFor(), чтобы получить код возврата процесса, он не блокирует, так что вы можете вызвать следующее приложение немедленно. Если вы хотите получить код возврата из приложения, запустите приложение на каждом потоке в качестве Майка.

+0

не могли бы вы объяснить мне, когда он будет блокироваться, и когда он не будет блокирован ... Я хочу выполнить .bat, который начнет новую партию. я могу сделать то же самое, и он не будет блокироваться. PLZ объяснить, как я новичок в этом. – user234194

+0

Когда вы создаете новый дочерний процесс с помощью Runtime.exec (...), он возвращает объект процесса, если вы хотите узнать код возврата дочернего процесса, вам придется подождать, пока он использует его для выхода, для этого просто вызовите waitFor() с полученным объектом процесса. waitFor() вызовет ваш поток, который вызывает этот блок методов, используя конец дочернего процесса. У вас есть 2 приложения, которые независимы друг от друга, если вам не нужно слушать код выхода из них, просто не вызывайте waitFor(), вы не будете блокировать и можете сразу вызвать следующий exec. – secmask

Смежные вопросы