写点什么

Java 中的线程与 C++ 中的区别

用户头像
jiangling500
关注
发布于: 2020 年 11 月 17 日

我是先学的C++,后学的Java,发现两者的线程在某些方面还是有很大的区别的,特此写篇文章记录下。

C++ 中的线程

C++ 中的线程如果既没有 detach,也没有 join 的话,在线程对象被销毁时,程序就会被异常终止掉,比如:

void myThread()
{
while (1)
{
cout << "MyThread is running!" << endl;
this_thread::sleep_for(2s);
}
}
int main()
{
thread t (myThread);
return 0;
}

执行上述程序,输出如下:

terminate called without an active exception
Aborted (core dumped)

解决的办法也很简单,加上语句 t.join();t.detach(); 即可,程序就不会被异常终止掉了。

另外,如果主线程执行结束了,那么其它所有线程都会退出。

Java 中的线程

而在 Java 中,只有当运行的线程都是守护线程时,Java 虚拟机才会退出。在如下代码中:

public class Main {
public static void main(String[] args) {
new Thread(() -> {
while (true) {
System.out.println("MyThread is running!");
}
}).start();
}
}

即使主线程执行结束了,在主线程中创建的线程也不会退出,因为该线程并不是守护线程。当然,我们也可以在主线程执行结束的时候终止当前正在运行的 Java 虚拟机,这样其它所有线程都会退出了,只要加上语句 System.exit(0) 即可。

小结

  • 在 C++ 中,线程如果既没有 detach,也没有 join 的话,在线程对象被销毁时,程序就会被异常终止掉。

  • 在 C++ 中,如果主线程执行结束了,那么其它所有线程都会退出。

  • 在 Java 中,只有当运行的线程都是守护线程时,Java 虚拟机才会退出。

发布于: 2020 年 11 月 17 日阅读数: 37
用户头像

jiangling500

关注

万丈高楼平地起,勿在浮沙筑高台! 2019.12.17 加入

一名IT从业者,熟悉Linux下C/C++,了解MySQL、Java等。

评论

发布
暂无评论
Java中的线程与C++中的区别