参考资料:https://my.oschina.net/hosee/blog/509557

结论:父线程的生命周期与子线程没有关系。

个人感觉:每个线程包括main线程(除了守护线程)都是平级关系,不像父子进程一样(父进程先消亡子变成孤儿进程),只有除了守护线程外所有线程都结束了,才会结束JVM

如果main方法中没有创建其他线程,那么当main方法返回时==>JVM就会结束==>Java应用程序。

但如果main方法中创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU资源,main方法返回(主线程结束)JVM也不会结束,要一直等到该程序所有线程全部结束才结束Java程序(另外一种情况是:程序中调用了Runtime类的exit方法,并且安全管理器允许退出操作发生。这时JVM也会结束该程序)。

那么又有个思考,JVM是怎么知道线程都结束的呢?

JVM中有一个线程DestroyJavaVM,执行main()的线程在main执行完后调用JNI中的jni_DestroyJavaVM()方法唤起DestroyJavaVM线程。JVM在Jboss服务器启动之后,就会唤起DestroyJavaVM线程,处于等待状态,等待其它线程(java线程和native线程)退出时通知它卸载JVM。线程退出时,都会判断自己当前是否是整个JVM中最后一个非deamon线程,如果是,则通知DestroyJavaVM线程卸载JVM。ps:扩展一下:1.如果线程退出时判断自己不为最后一个非deamon线程,那么调用thread->exit(false),并在其中抛出thread_end事件,jvm不退出。2.如果线程退出时判断自己为最后一个非deamon线程,那么调用before_exit()方法,抛出两个事件: 事件1:thread_end线程结束事件、事件2:VM的death事件。然后调用thread->exit(true)方法,接下来把线程从active list卸下,删除线程等等一系列工作执行完成后,则通知正在等待的DestroyJavaVM线程执行卸载JVM操作。

java 事务管理 子父线程_Java中的父线程与子线程相关推荐

  1. java线程唤醒线程_Java中如何唤醒“指定的“某个线程

    群里有学C#转Java的小朋友问:Java中有木有一个办法唤醒一个"指定的"线程. 熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wa ...

  2. Java事务管理之Spring+Hibernate

    环境与版本 除了上一篇中的hibernate的相关lib 外 Java事务管理之Hibernate 还需要加入Spring的lib 包和如下的一些依赖包 org.aopalliance org.asp ...

  3. 【Android 异步操作】线程池 ( Worker 简介 | 线程池中的工作流程 runWorker | 从线程池任务队列中获取任务 getTask )

    文章目录 一.线程池中的 Worker ( 工作者 ) 二.线程池中的工作流程 runWorker 三.线程池任务队列中获取任务 getTask 在博客 [Android 异步操作]线程池 ( 线程池 ...

  4. java 事务管理 子父线程_java父线程子线程(转)

    问:在父线程中New了一个子线程,想在停止父线程时也停止子线程,应该怎么做? 答: 从某种程度上讲,做不到. 不管是父线程还是子线程,这只不过是在运行时谁建了谁时用的,一旦所谓的字线程被启动,这两个线 ...

  5. java队列怎么实现线程_Java中利用线程和队列实现入库操作

    Java单线程中,如果需要大量的数据库操作,会在IO方面产生瓶颈,特别是数据库连接失败时,大量资源会消耗在数据库连接的检测上,从而使程序的实时响应速度变慢.解决的办法就是将数据库操作单独放置在一个线程 ...

  6. java中多线程编程案例_Java中多线程编程实战的实现线程_Java编程_Java程序员_课课家...

    java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的.尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握.要记住的一件重要的事情是 main() 函数也是 ...

  7. java 如何结束线程_java中,如何安全的结束一个正在运行的线程?

    问题 Java中提供了很多调度线程的方法,上一节介绍了其中一种控制线程的方法:如何等待一个线程结束.那么如果不希望等待线程结束,而是根据问题的需要随时都要中断线程使其结束,这种对线程的控制方法该如何实 ...

  8. java 获取线程某个_Java中如何唤醒“指定的“某个线程

    熟悉线程操作的小朋友应该知道,Java中线程的挂起和唤醒一般用synchronized + wait + notify完成. 比如: synchronized(o) { o.wait(); //wai ...

  9. java公平索非公平锁_java中的非公平锁不怕有的线程一直得不到执行吗

    首先来看公平锁和非公平锁,我们默认使用的锁是非公平锁,只有当我们显示设置为公平锁的情况下,才会使用公平锁,下面我们简单看一下公平锁的源码,如果等待队列中没有节点在等待,则占有锁,如果已经存在等待节点, ...

最新文章

  1. ASP.NET、Ajax、Silverlight学习电子资料汇总
  2. nodejs 的序列化与反序列化
  3. LightOJ 1078 Integer Divisibility (同余定理)
  4. 智能家居 (7) ——网络服务器线程控制
  5. 没有标题,配得上这款“俄罗斯方块”
  6. mysql row_id为什么是6字节?为什么是8字节
  7. c++客户端发送加锁_MySQL语句加锁分析详解
  8. mysql的set架构_MYSQL 整体架构浅析
  9. 95-100-010-源码-flink-annotations-简介
  10. can使能上拉 gpio_单片机GPIO输入电压不可过大,最好使能上拉
  11. visual studio(vs)中项目解决方案的目录组织安排
  12. Parallels Desktop:pd虚拟机 17 for mac
  13. 嵌入式Linux移植实验
  14. 简单的安卓木马制作(实现外网控制)
  15. Ubuntu 18.04.3 LTS - 安装 Spring Tool Suite 4
  16. c语言 常微分方程 库,使用C语言解常微分方程CODE.docx
  17. 苹果描述文件服务器证书无效,iOS 描述文件重新配置失效问题,解决方法!
  18. 阿里副总裁玄难:藏经阁计划首次在阿里应用落地
  19. IOS对自动播放语音视频做了限制,h5如何实现间隔一段时间自动播放语音
  20. 2010.4.24更新 windows 7 x86/x64 应用全面导航(菜鸟老鸟全兼容)

热门文章

  1. 如何限制iframe内网页打开新窗口_网页外链用了 target=quot;_blankquot;,结果悲剧了...
  2. 整个电脑键盘被锁住了_蜗居共享经济,如何彻底榨干你家里的电子设备|鼠标|共享经济|键盘|电脑桌|显示器|升降支架...
  3. 北师大网络教育计算机试题一的答案,北师大网络教育《专科英语一》作业3部分答案...
  4. html5 can,基于html5 can-vas实现漫天飞雪效果实例
  5. php自动发邮件系统,一个简单的自动发送邮件系统(二)_php基础
  6. vmware view 桌面源不可用_在 openEuler 上安装桌面环境
  7. 微信小程序 mpvue 获取元素的高度
  8. 我的react+material-ui之路
  9. 排球计分程序重构(四)
  10. MyEclipse非正常关闭问题