如图有3段启动线程的代码,经过测试,只有第一段代码启动的线程主线程不会等,第二种要等new的线程代码执行完毕程序才会退出,第三段是线程池也不会退出。
想请教这是为什么呢,尤其第一种写法不理解为什么主线程不会等他执行完呢?
线程分daemon线程和user(或者非daemon)线程当所有线程都是daemon线程的时候jvm会退出CompletableFuture.supplyAsync默认用的线程池都是daemon线程,所以主线程结束后jvm退出new Thread()不设置setDaemon(true)是user线程,要运行结束jvm才可以退出Executor默认也是user线程,要运行结束jvm才可以退出
daemon线程
user(或者非daemon)线程
CompletableFuture.supplyAsync
new Thread()
setDaemon(true)
user线程
Executor
2.1m questions
2.1m answers
60 comments
56.6k users