默认情况下是Java单线程还是多线程?

时间:2014-08-29 20:06:54

标签: java multithreading

我在我的应用程序中没有使用任何线程概念 - 默认情况下它是单线程还是多线程?

2 个答案:

答案 0 :(得分:6)

从技术上讲,每个Java应用程序都有相当多的线程(您可以使用jvisualvm进行检查),但从开发人员的角度来看,命令行应用程序是单线程的,除非您明确创建更多线程或使用API​​调用指定它可以在不同的线程中运行。 (例如Runtime.addShutdownHook

这些调用的特别提及应该转到Object.finalize()方法,该方法声明:

  

Java编程语言不保证哪个线程将为任何给定对象调用finalize方法。但是,可以保证,调用finalize时,调用finalize的线程不会持有任何用户可见的同步锁。如果finalize方法抛出未捕获的异常,则忽略该异常并终止该对象的终止。

这可能是意外创建多线程应用程序的最简单方法。这也是为什么强烈建议不要使用finalize()的原因之一,应该仅限于非常具体的情况,例如释放对象使用的本机资源。

但是,AWT和Swing应用程序几乎总是以多线程结束,因此应该使用extra care

答案 1 :(得分:2)

每个Java应用程序至少有两个线程(可能还有更多)。总是有主要或应用程序线程和垃圾收集器线程。