Java 在Main方法中运行两个线程

Java 在Main方法中运行两个线程,java,multithreading,concurrency,Java,Multithreading,Concurrency,可以选择在main方法中运行哪个线程吗?例如: public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { System.out.print("How many entries do you want to make? "); entries = input

可以选择在main方法中运行哪个线程吗?例如:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
        System.out.print("How many entries do you want to make? ");
        entries = input.nextInt();
        System.out.print("\nPlease enter your choice:\n ");
        System.out.print("\n1. Specific file");
        System.out.println("\n2. All files\n");
        userChoice = choiceScanner.nextInt();
        if (userChoice == 1)
           new Thread(new GUIGenerator(entries)).start();
        if (userChoice == 2)
           new Thread(new GUIGenerator2(entries)).start();
        }
    });
}

在这里,我想做的是让程序根据用户输入的内容在第一个或第二个线程中运行。这是可能的,还是main只能占用一个线程?

多线程背后的整个思想是,它允许代码并行执行指令(即同时执行)。因此,如果从main启动一个新的
线程,那么新的
线程将开始执行,您的
Main
将继续执行下一条指令,就好像
线程从来没有发生过一样。是的,可以同时执行新的
线程和初始程序流。

多线程背后的整个思想是,它允许代码并行执行指令(即同时执行)。因此,如果从主线程启动新的
线程
,新的
线程
将开始执行,而
主线程
将继续执行下一条指令,就好像
线程
从未发生过一样。因此,是的,很可能同时执行新的
线程和初始程序流。

SwingUtilities的全部要点。invokeLater
是传递一个runnable,Swing在可能时为您运行它。如果要与UI交互,您不应该自己运行东西,因为只有一个应用程序线程呈现图形组件。从表面上看,这个片段似乎不正确


我不明白为什么此时需要创建新线程,只需调用
GUIGenerator.run
GUIGenerator2.run
中包含的任何代码即可

SwingUtilities.invokeLater的全部要点是传递一个runnable并在可能的时候为您运行它。如果要与UI交互,您不应该自己运行东西,因为只有一个应用程序线程呈现图形组件。从表面上看,这个片段似乎不正确

我不明白为什么此时需要创建新线程,只需调用
GUIGenerator.run
GUIGenerator2.run
中包含的任何代码即可

“是否可以选择在主方法中运行哪个线程?”

理性的是你已经在你的例子中做到了。没有任何东西可以阻止您编写触发线程的一个实现与另一个实现的逻辑(例如您提供的if-else条件)

“是否可以选择在主方法中运行哪个线程?”


理性的是你已经在你的例子中做到了。没有任何东西可以阻止您编写触发线程的一个实现与另一个实现的逻辑(例如您提供的if-else条件)

是的,这是可能的。您将使主线程与新线程(包含
GUIGenerator
GUIGenerator2
)同时运行。现在,主方法在GUIGenerator()中。我替换了新线程(新GUIGenerator(entries)).start();使用新的GUIGenerator(),它可以正常工作。如果我替换新线程(新的GUIGenerator2(entries)).start()是否仍然有效;使用新的GUIGenerator2()?我还没有编写GUIGenerator2(),因此无法像使用GUIGenerator()那样进行测试。是的,这是可能的。您将使主线程与新线程(包含
GUIGenerator
GUIGenerator2
)同时运行。现在,主方法在GUIGenerator()中。我替换了新线程(新GUIGenerator(entries)).start();使用新的GUIGenerator(),它可以正常工作。如果我替换新线程(新的GUIGenerator2(entries)).start()是否仍然有效;使用新的GUIGenerator2()?我还没有编写GUIGenerator2(),因此无法像使用GUIGenerator()那样对其进行测试。目前,主要方法在GUIGenerator()中。我替换了新线程(新GUIGenerator(entries)).start();使用新的GUIGenerator(),它可以正常工作。如果我替换新线程(新的GUIGenerator2(entries)).start()是否仍然有效;使用新的GUIGenerator2()?我还没有编写GUIGenerator2(),所以我无法像使用GUIGenerator()那样进行测试。这肯定会奏效!显然,
GUIGenerator
GUIGenerator
现在都不应该包含main方法,main方法在GUIGenerator()中。我替换了新线程(新GUIGenerator(entries)).start();使用新的GUIGenerator(),它可以正常工作。如果我替换新线程(新的GUIGenerator2(entries)).start()是否仍然有效;使用新的GUIGenerator2()?我还没有编写GUIGenerator2(),所以我无法像使用GUIGenerator()那样进行测试。这肯定会奏效!显然,无论是
GUIGenerator
还是
GUIGenerator
都不应该包含一个主要方法。您缺少这个问题的Swing特殊性,使得您的答案与问题无关Swing部分对问题真的那么重要吗?Swing如何使if-else构造对原始问题无效?Swing与Java中的许多UI框架一样,如果您希望避免冻结UI,它有关于多线程的特定规则。您不应该从应用程序线程以外的任何其他线程与UI组件交互。因此,问题中的代码是不正确的,很可能会导致出现故障。您缺少此问题的Swing特殊性,使您的答案与问题无关Swing部分对问题真的那么重要吗?Swing如何使if-else构造对原始问题无效?Swing与Java中的许多UI框架一样,如果您希望避免冻结UI,它有关于多线程的特定规则。您不应该从应用程序线程以外的任何其他线程与UI组件交互。因此,问题中的代码是不正确的