问:在父线程中New了一个子线程,想在停止父线程时也停止子线程,应该怎么做?

答:

从某种程度上讲,做不到。

不管是父线程还是子线程,这只不过是在运行时谁建了谁时用的,一旦所谓的字线程被启动,这两个线程是没有先后贵贱区分的。

任何线程是没有办法把另外一个线程终止的。

如果你一定想你说的那样是线的话,下面是唯一个可行方案。在"父线程"建立“子线程”时,把“父线程”的instance传过去,在“子线程”里,不停的check"父线程"是否还存活,如果否,停止。

相反的,如果"父线程"需要在"子线程"终了时结束,在"父线程"建立“子线程”时,留住“子线程”的instance然后keep   checking   whether   it's   still   alive.

================================================================================

只有在所有非守护进程都停止的情况下,jvm才退出。main线程停止jvm也不一定退出:

1: public class TestMitiThread {2:3: public static void main(String[] rags) {4:5: System.out.println(Thread.currentThread().getName() + " 线程运行开始!");6:7: new MitiSay("A").start();8:9: new MitiSay("B").start();10:11: System.out.println(Thread.currentThread().getName() + " 线程运行结束!");12:13: }14:15:16:17: class MitiSay extends Thread {18:19: public MitiSay(String threadName) {20:21: super(threadName);22:23: }24:25: public void run() {26:27: System.out.println(getName() + " 线程运行开始!");28:29: for (int i = 0; i < 10; i++) {30:31: System.out.println(i + " " + getName());32:33: try {34:35: sleep((int) Math.random() * 10);36:37: } catch (InterruptedException e) {38:39: e.printStackTrace();40:41: }42:43: }44:45: System.out.println(getName() + " 线程运行结束!");46:47: }48:49:50:

运行结果:

main 线程运行开始!

main 线程运行结束!

A 线程运行开始!

0 A

1 A

B 线程运行开始!

2 A

0 B

3 A

4 A

1 B

5 A

6 A

7 A

8 A

9 A

A 线程运行结束!

2 B

3 B

4 B

5 B

6 B

7 B

8 B

9 B

B 线程运行结束!

java 事务管理 子父线程_java父线程子线程(转)相关推荐

  1. Java事务管理之Spring+Hibernate

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

  2. java 关闭守护线程_Java并发编程之线程生命周期、守护线程、优先级、关闭和join、sleep、yield、interrupt...

    Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Jav ...

  3. Java事务管理之Hibernate

    环境与版本 Hibernate 版本:Hibernate 4.2.2 (下载后的文件名为hibernate-release-4.2.2.Final.zip,解压目录hibernate-release- ...

  4. java 停止一个线程_Java如何停止一个线程

    线程正常执行完毕,正常结束. 2.监视某些条件,直到某些条件成立,结束线程. class TestMyThread extends Thread { private volatile boolean ...

  5. java 镶嵌创建线程_Java多线程——之一创建线程的四种方法

    1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public ...

  6. java 事务管理 子父线程_Java中的父线程与子线程

    参考资料:https://my.oschina.net/hosee/blog/509557 结论:父线程的生命周期与子线程没有关系. 个人感觉:每个线程包括main线程(除了守护线程)都是平级关系,不 ...

  7. java 父线程_Java父线程(或是主线程)等待所有子线程退出的实例

    导读热词 实例如下: static void testLock1(){ final AtomicInteger waitCount = new AtomicInteger(30000); final ...

  8. Java事务管理之JDBC

    前言 关于Java中JDBC的一些使用可以参见: Java 中使用JDBC连接数据库例程与注意事项 在使用JDBC的使用, 如何进行事务的管理.直接看一下代码 示例代码 /** * @Title: J ...

  9. java 线程强制停止线程_java多线程之停止线程

    在多线程开发中停止线程是非常重要的技术点. 停止线程在Java语言中并不像break语句那样干脆.须要一些技巧性的处理. 一.  异常法 採用异常法来停止一个线程.首先我们须要了解一下两个方法的使用方 ...

最新文章

  1. net.sf.json将string转为map
  2. 网页性能优化01-精灵图利弊与应用场景
  3. c语言程序设计函数6,C语言程序设计》第6章函数-XiamenUniversity.PDF
  4. 解决kettle配置文件中的中文乱码
  5. hdu 确定比赛名次
  6. [css] 用css给一个元素加边框有哪些方法?
  7. Android Studio Flutter 调试技巧 Flutter Inspector 提升你的维护开发效率 轻松定位复杂嵌套Widget代码位置
  8. python从1到n整数中1点的个数_Python解决 从1到n整数中1出现的次数
  9. win7建立服务器文件夹权限,win7 ftp服务器 文件夹权限
  10. 如何系统的自学python-如何系统地自学Python
  11. UVA103 dp基础题,DAG模型
  12. Win10和Ubuntu20.04双系统启动引导项修复指南
  13. python哪些模板引擎比较_3 个 Python 模板库比较
  14. Executing an update/delete query
  15. 用Python做图片分类:前置处理,图片的缩小保存
  16. Aspose.word Java实现html转word,word转html
  17. OraDump导出套件
  18. 没学过Word排版的看过来 Word排版技巧分享
  19. 说故我在-跟老友记练口语
  20. Oracle使用纪要

热门文章

  1. narwal机器人_国货之光!云鲸NARWAL扫地机器人国外众筹获第一
  2. 力扣 777. 在LR字符串中交换相邻字符
  3. 329、微信账户体系科普:什么是UnionId、OpenId与wxopenid?
  4. Week 3: 边下边播完整性校验作业
  5. SRM采购框架协议阶梯计价方法
  6. Spring Data JDBC、引用和聚合
  7. 找工作系列之-操作系统
  8. 项目管理过程中六种冲突解决方法
  9. PhpStorm2017破解版
  10. D. Serval and Rooted Tree