我正在编写一个计算两个平方矩阵乘法的简单程序。 程序应该在我预定义的线程数之间划分工作。
我这样做的方法是每个线程计算结果矩阵的不同行。
所以每个线程执行的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>
谢谢!
答案 0 :(得分:1)
是的,主线程可以在其他线程结束之前结束运行。
查看setDaemon()
课程的Thread
方法:https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDaemon(boolean)
将此线程标记为守护程序线程或用户线程。当运行的唯一线程都是守护程序线程时,Java虚拟机将退出。
必须在线程启动之前调用此方法。
在所有非守护程序线程执行完毕后,JVM将关闭。
在您的情况下,一旦主线程和工作线程完成执行,JVM将关闭,程序将结束。
一个有趣的说明:如果主线程没有在任何工作线程上调用join()
,它实际上可能在工作线程完成执行之前结束。