如何解决Java中的多线程父子线程执行
这是有关Java多线程的初学者问题。
根据我的理解,创建多个(用户)线程来运行程序或应用程序时,没有父级和子级线程的概念。它们都是独立的用户线程。
因此,如果主线程完成执行,则另一个线程(Thread2)仍将继续执行,因为直到Thread2的执行线程完成(https://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html,{{3} })
然后为什么当主线程在以下代码中退出时,我看不到Thread2打印的.log()
日志:
@Test
public void parentMainThreadAndChildThreadTest_WithSpringWebFlux() throws InterruptedException {
Flux<Long> infiniteFlux = Flux.interval(Duration.ofMillis(100));
infiniteFlux.subscribe((element) -> System.out.println("Value is:::" +element));
Thread.sleep(3000); //Main thread sleeps for 3 seconds
}
我看到,如果通过使主线程进入睡眠状态来延长其寿命,那么我可以看到system out语句。但是,即使Thread2仍在异步运行,为什么在主线程完成后仍不显示它们?
测试方法是由主线程的执行线程执行的,那么在这种情况下,主线程完成后线程2会发生什么情况?
解决方法
如果主线程完成执行,则另一个线程(Thread2)仍将继续执行
这仅适用于普通线程。线程池的线程通常被配置为 daemon线程,当所有普通线程完成后,它们将被强制停止。
就您而言,
(element) -> System.out.println("Value is:::" +element)
在从反应堆线程池中获取的守护程序线程上执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。