2010-08-13 8 views
0

Disons que,lot exécution de Java

J'ai une JavaClass1.java.I de classe Java am 2 fichiers exécutaient lots de cette classe Java. Chaque fichier .bat démarre une autre application Java. Disons que ces deux autres applications prend 15 heures chacune pour compléter, et ils ne sont pas non plus dépendants les uns des autres.

Comment puis-je résoudre ce problème. Je ne dois pas attendre que l'un de compléter pour que je dois commencer un autre, je peux le faire simultanément aussi.

J'ai trouvé des gens qui parlaient de transmission de flux de sortie, de flux d'entrée et de flux d'erreur, si j'attendais que les erreurs gèrent, alors je dois attendre 15 heures pour chacun. Je ne veux pas faire ça.

Y at-il un moyen? Veuillez suggérer. Merci

Répondre

2

Placez le mécanisme pour lancer chaque fichier .bat dans son propre thread, puis démarrez chaque thread.

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

qu'en est-il de la manipulation des fils ... Dois-je m'inquiéter à ce sujet? – user234194

+0

J'ai modifié pour publier du code. Je viens d'utiliser des cours anonymes. Donc apparemment pas de soucis. – Mike

+0

je ne dois pas détruire le fil une fois que j'ai créé. désolé de demander mais je ne sais pas grand chose sur les discussions. ou pourriez-vous expliquer les conséquences de l'extrait de code ci-dessus? – user234194

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

Il suffit d'utiliser Runtime exécuter le service, si vous ne l'appelez pas Process.waitFor() pour obtenir le code de retour du processus, il ne bloque pas, vous pouvez appeler la prochaine application immédiatement. Si vous voulez un code de retour depuis l'application, exécutez l'application sur chaque thread en tant que Mike.

+0

pourriez-vous m'expliquer quand il va bloquer et quand il ne va pas bloquer ... je veux exécuter .bat qui va commencer un autre lot. Puis-je faire la même chose et ça ne bloquera pas. plz expliquer comme je suis nouveau à ce sujet. – user234194

+0

Lorsque vous créez un nouveau processus enfant à l'aide de Runtime.exec (...), il renvoie un objet de processus, si vous voulez connaître le code retour du processus enfant, vous devez l'attendre, utilisez exit, pour cela, juste Appelez waitFor() avec l'objet de processus que vous avez reçu. waitFor() provoquera votre thread, qui appellent cette méthode, bloquent la fin du processus enfant. Si vous n'avez pas besoin d'écouter le code de sortie de ces deux applications, n'appelez pas waitFor(), vous ne serez pas bloqué et pourrez appeler next exec immédiatement. – secmask