在主方法

时间:2016-06-28 23:44:58

标签: 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.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();
        }
    });
}

在这里,我想要做的是让程序运行第一个或第二个线程,具体取决于用户输入的内容。这是可能的,还是主要只需要一个线程?

3 个答案:

答案 0 :(得分:1)

多线程背后的整个想法是它允许你的代码并行执行指令(也就是同时执行。)因此,如果你从main开始一个新的Thread,你的新{{1} }}将开始执行,Thread将继续执行下一条指令,就像Main从未发生过一样。所以是的,很有可能同时执行新的Thread和初始程序流。

答案 1 :(得分:1)

SwingUtilities.invokeLater的全部意义在于你传递了一个runnable,Swing会在你可以的时候为你运行它。如果它与UI进行交互,你不应该自己运行东西,因为只有一个应用程序线程呈现图形组件。只是从它的外观来看,这个片段似乎不正确。

我不明白为什么你需要创建一个新线程,你只需要调用GUIGenerator.runGUIGenerator2.run中包含的任何代码。

答案 2 :(得分:0)

"是否可以选择在main方法中运行哪个线程?"

理性是你已经在你的例子中做过了。没有什么可以阻止你编写逻辑(例如你提供的if-else条件)来激活你的线程的一个实现与另一个实现。