Java中的线程与C++中的区别
我是先学的C++,后学的Java,发现两者的线程在某些方面还是有很大的区别的,特此写篇文章记录下。
C++ 中的线程
C++ 中的线程如果既没有 ,也没有 的话,在线程对象被销毁时,程序就会被异常终止掉,比如:
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)
解决的办法也很简单,加上语句 或 即可,程序就不会被异常终止掉了。
另外,如果主线程执行结束了,那么其它所有线程都会退出。
Java 中的线程
而在 Java 中,只有当运行的线程都是守护线程时,Java 虚拟机才会退出。在如下代码中:
public class Main {
public static void main(String[] args) {
new Thread(() -> {
while (true) {
System.out.println("MyThread is running!");
}
}).start();
}
}
即使主线程执行结束了,在主线程中创建的线程也不会退出,因为该线程并不是守护线程。当然,我们也可以在主线程执行结束的时候终止当前正在运行的 Java 虚拟机,这样其它所有线程都会退出了,只要加上语句 即可。
小结
在 C++ 中,线程如果既没有 ,也没有 的话,在线程对象被销毁时,程序就会被异常终止掉。
在 C++ 中,如果主线程执行结束了,那么其它所有线程都会退出。
在 Java 中,只有当运行的线程都是守护线程时,Java 虚拟机才会退出。