当前位置: 首页 > 知识库问答 >
问题:

Java中的多线程父子线程执行

晁璞
2023-03-14

这是一个关于Java中多线程的初学者问题。

根据我的理解,当创建多个(用户)线程来运行程序或应用程序时,就没有父线程和子线程的概念。它们都是独立的用户线程。

因此,如果主线程完成执行,那么另一个线程(Thread2)仍将继续执行,因为在Thread2的执行线程完成之前,它不会被JVM杀死(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
    }

我看到,如果我通过使主线程Hibernate来增加其寿命,那么我可以看到系统输出语句。但是为什么即使Thread2仍在异步运行,当主线程完成时,它们也不显示?

测试方法由主线程的执行线程执行,那么在这种情况下,主线程完成后Thread2会发生什么?

共有1个答案

麹承
2023-03-14

如果主线程完成执行,那么另一个线程(Thread2)仍将继续执行

这仅适用于普通线程。线程池的线程通常配置为守护进程线程,当所有正常线程完成时,守护进程线程将被迫停止。

就你而言,

(element) -> System.out.println("Value is:::" +element)

在取自反应器线程池的守护线程上执行。

 类似资料:
  • 我想从可运行线程抛出异常,但不可能从线程抛出它,所以我们可以将chlild线程的状态(任何异常)传递给父线程吗?. 我读到过thread.join(),但在这种情况下,父线程会一直等到子线程完成执行。 在我的例子中,我的父线程在一段时间后逐个启动线程,但当任何线程抛出异常时,它应该将失败通知paent,以便父线程不会启动其他线程。 有什么方法可以实现吗?谁能帮我解决这个问题。

  • 我找到了关于线程安全的代码,但它没有来自给出示例的人的任何解释。我想知道为什么如果我不在“count”之前设置“synchronized”变量,那么count值将是非原子的(总是=200是期望的结果)。谢谢

  • 我有一个很大的json文件,其中包含一个很长的信息列表,我需要在许多子线程中只读该列表。 在java中,我们可以只通过值而不是引用来传递变量,我希望在内存/磁盘使用方面尽可能减少我的程序。 现在我将完整的列表或它的子列表传递给我创建的每个线程。 有没有一种方法可以从所有线程访问相同的列表变量,而不将完整的列表复制到每个线程中? 我需要“只读取”列表 下面是我的程序是如何工作的 1-服务(等待文件创

  • 问题内容: 我正在为我的ubuntu服务器(针对我的多客户端匿名聊天程序)实现一种简单的线程池机制,并且需要使我的工作线程进入睡眠状态,直到需要执行一项工作(以函数指针和参数的形式) 。 我当前的系统即将关闭。我(工人线程正在)问经理是否有工作可用,以及是否有5毫秒没有睡眠。如果存在,请将作业添加到工作队列中并运行该函数。糟糕的循环浪费。 什么我 喜欢 做的是做一个简单的事件性的系统。我正在考虑有

  • 6.7.2.多线程执行 与在单线程中阻塞相比,更好的做法是让程序运行在多个线程之中。系统负责分配CPU时间,几个线程仿佛在同一时刻同时运行。这样可以避免某线程独占计算资源。 图6.10. 多线程执行 在例子中,我们将网络操作的相关代码放到独立的线程里面。这样我们的主线程可以避免阻塞在网络操作上,用户界面不会响应不灵。按惯例,我们一般认为主线程是运行于前台,而其它的线程都是运行于后台。这是因为前端的

  • 主要内容:1 如何使用多个线程执行一个任务,2 如何使用多个线程执行多个任务1 如何使用多个线程执行一个任务 如果需要由多个线程执行单个任务,则只有一个run()方法,例如: 1.1 多个线程执行一个任务示例1 输出结果为: 1.2 多个线程执行一个任务示例2 输出结果为: 注意:每个线程在单独的堆栈中运行。 2 如何使用多个线程执行多个任务 如果必须通过多个线程执行多个任务,请使用多个run() 方法: 2.1 多个线程执行多个任务示例1 输出结果为: 2.2 多个线程