在连接所有线程之前,main()是否可以运行?

时间:2015-04-12 16:57:30

标签: java multithreading join

我正在编写一个计算两个平方矩阵乘法的简单程序。 程序应该在我预定义的线程数之间划分工作。

我这样做的方法是每个线程计算结果矩阵的不同行。

所以每个线程执行的run()方法是:

@Override
public void run() {
    for (int y = 0; y < numLines; y++)
        for (int x = 0; x < matrixSize; x++)
            result[startLine + y][x] = singleIndexCalc(startLine + y, x);
}

此程序没有同步(任何地方)。 所以我的问题是,如果我必须在结束main()方法之前注意加入线程,或者它没关系,因为线程将(肯定)完成运行并死亡。

我问这个因为我不想离开正在运行的线程(当他们等待等待时可能会发生这种情况),但在这个例子中它是不可能的。< / p>

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,主线程可以在其他线程结束之前结束运行。

查看setDaemon()课程的Thread方法:https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDaemon(boolean)

  

将此线程标记为守护程序线程或用户线程。当运行的唯一线程都是守护程序线程时,Java虚拟机将退出。

     

必须在线程启动之前调用此方法。

在所有非守护程序线程执行完毕后,JVM将关闭。

在您的情况下,一旦主线程和工作线程完成执行,JVM将关闭,程序将结束。

一个有趣的说明:如果主线程没有在任何工作线程上调用join(),它实际上可能在工作线程完成执行之前结束。