我在我的应用程序中没有使用任何线程概念 - 默认情况下它是单线程还是多线程?
答案 0 :(得分:6)
从技术上讲,每个Java应用程序都有相当多的线程(您可以使用jvisualvm进行检查),但从开发人员的角度来看,命令行应用程序是单线程的,除非您明确创建更多线程或使用API调用指定它可以在不同的线程中运行。 (例如Runtime.addShutdownHook)
这些调用的特别提及应该转到Object.finalize()
方法,该方法声明:
Java编程语言不保证哪个线程将为任何给定对象调用finalize方法。但是,可以保证,调用finalize时,调用finalize的线程不会持有任何用户可见的同步锁。如果finalize方法抛出未捕获的异常,则忽略该异常并终止该对象的终止。
这可能是意外创建多线程应用程序的最简单方法。这也是为什么强烈建议不要使用finalize()
的原因之一,应该仅限于非常具体的情况,例如释放对象使用的本机资源。
答案 1 :(得分:2)
每个Java应用程序至少有两个线程(可能还有更多)。总是有主要或应用程序线程和垃圾收集器线程。