Java 在Main方法中运行两个线程
可以选择在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
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组件交互。因此,问题中的代码是不正确的