gpt4 book ai didi

java - main() 可以在加入所有线程之前结束运行吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:27 24 4
gpt4 key购买 nike

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

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

所以每个线程执行的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() 方法之前注意加入线程,或者这无关紧要,因为线程将(肯定)完成运行并死亡。

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

谢谢!

最佳答案

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

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

Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads.

This method must be invoked before the thread is started.

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

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

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

关于java - main() 可以在加入所有线程之前结束运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com