【发布时间】:2020-09-14 16:30:44
【问题描述】:
这是一个关于 Java 多线程的初学者问题。
根据我的理解,当创建多个(用户)线程来运行程序或应用程序时,没有父线程和子线程的概念。它们都是独立的用户线程。
所以,如果主线程完成执行,那么另一个线程(Thread2)仍将继续执行,因为它不会被 JVM 杀死,直到 Thread2 的执行线程完成(https://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html,https://stackoverflow.com/a/9651919/6700081)
那为什么当主线程在下面的代码中退出时,我没有看到来自 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
}
我看到如果我通过让主线程进入睡眠状态来增加主线程的生命,那么我可以看到系统输出语句。但是为什么Thread2还在异步运行,但主线程结束后却不显示呢?
测试方法是由主线程的执行线程执行的,那么在这种情况下,主线程完成后Thread2会发生什么?
【问题讨论】:
-
因为它是异步的?
-
是的,它是异步的。在这种情况下 Thread2 会发生什么?
-
您链接到有关标准线程的文档,但
Flux是更大框架的一部分。我认为阅读该框架的文档将是答案。
标签: java multithreading spring-webflux