Java 中的线程与 C++ 中的区别
我是先学的C++,后学的Java,发现两者的线程在某些方面还是有很大的区别的,特此写篇文章记录下。
C++ 中的线程
C++ 中的线程如果既没有 detach
,也没有 join
的话,在线程对象被销毁时,程序就会被异常终止掉,比如:
执行上述程序,输出如下:
解决的办法也很简单,加上语句 t.join();
或 t.detach();
即可,程序就不会被异常终止掉了。
另外,如果主线程执行结束了,那么其它所有线程都会退出。
Java 中的线程
而在 Java 中,只有当运行的线程都是守护线程时,Java 虚拟机才会退出。在如下代码中:
即使主线程执行结束了,在主线程中创建的线程也不会退出,因为该线程并不是守护线程。当然,我们也可以在主线程执行结束的时候终止当前正在运行的 Java 虚拟机,这样其它所有线程都会退出了,只要加上语句 System.exit(0)
即可。
小结
在 C++ 中,线程如果既没有
detach
,也没有join
的话,在线程对象被销毁时,程序就会被异常终止掉。在 C++ 中,如果主线程执行结束了,那么其它所有线程都会退出。
在 Java 中,只有当运行的线程都是守护线程时,Java 虚拟机才会退出。
版权声明: 本文为 InfoQ 作者【jiangling500】的原创文章。
原文链接:【http://xie.infoq.cn/article/67fc758b6422ead70122d2998】。文章转载请联系作者。
评论