使用一个java命令执行两个单独的类

时间:2013-05-13 07:41:27

标签: java javac

是否可以使用一个java命令执行两个单独的类?

我想为我的项目同时运行一些java程序(它应该同时启动)。

示例:我有两个java程序A.javaB.java

编译

javac A.java B.java

运行

java A B

然而,这不起作用。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

不,java command根本不起作用。

而是C.java同时调用A& B课程。

答案 1 :(得分:1)

创建一个类,说Parallel具有其他类名称的命令行参数。 然后为每个类启动一个新线程并调用它的主。

可能可以做得更整洁。

java Parallel A B

public class Parallel {

    public static void main(String[] args) {
        for (String arg : args) {
            try {
                Class<?> klazz = Class.forName(arg);
                final Method mainMethod = klazz.getDeclaredMethod("main",
                    String[].class);
                if (mainMethod.getReturnType() != void.class) {
                    throw new NoSuchMethodException("main not returning void");
                }
                int modifiers = mainMethod.getModifiers();
                if (!Modifier.isStatic(modifiers)
                    || !Modifier.isPublic(modifiers)) {
                    throw new NoSuchMethodException("main not public static");
                }
                Thread thread = new Thread(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            mainMethod.invoke(null, (Object)new String[0]);
                        } catch (IllegalAccessException
                            | IllegalArgumentException
                            | InvocationTargetException ex) {
                            Logger.getLogger(Parallel.class.getName())
                                .log(Level.SEVERE, null, ex);
                        }
                    }
                });
                thread.start();
            } catch (ClassNotFoundException
                | NoSuchMethodException
                | SecurityException ex) {
                Logger.getLogger(Parallel.class.getName())
                    .log(Level.SEVERE, null, ex);
            }                        
        }
    }
}

答案 2 :(得分:0)

不,CPU将始终作为第一个启动一个命令,你可以做的是让两个线程等待一些通知,告知它们开始,但即便如此,我猜其中一个将开始为另一个

答案 3 :(得分:0)

无论你多么努力地同时启动它们,输出都不会一致。即使您尝试通过第三个类加载它们,这也不会起作用。

您可以做的是您需要在代码中处理此逻辑。可能的选项是 -

  1. 在不同的线程中运行对象并使其中一个加入。(这应该是理想的场景。两种方式依赖性都不好)
  2. 在两个程序中添加逻辑以在相同的给定时间执行关键代码(例如,使两者都在美国东部时间16:00运行)。 (我仍然会说#1选项更好)