Ⅰ java子线程抛出异常后,怎么让主线程随之结束
子线程执行System.exit(0),会停止主线程。
整个当前java进程会结束。所以进程中的所有线程也会随时结束。
不过不理解你为什么需要这种需求,这不是什么好的处理异常的方式。
Ⅱ java里怎么理解守护线程在主线程结束后要过一会才结束
一个守护线程什么时候结束不取决于主线程什么时候结束。守护线程的作用是在后台运行任务,只要还有一个以上非守护线程没有结束(即便此时主线程已结束),程序就不会结束。而程序没结束,守护线程当然还可以继续运行。
反过来,当所有非守护线程都结束了后,即便还有未结束的守护线程,系统也会马上结束这些守护线程,然后结束程序。
Ⅲ java 主线程已经执行完了,为什么子线程还在运行
其实是子线程运行结束后主线程才退出的。因为是子线程开启后,主线程和子线程的代码同时继续运行。当主线程的代码全部执行完后,若子线程还没执行完,主线程会等待子线程执行结束后退出程序。
Ⅳ java线程执行完后自己结束吗
其实最佳答案的说法是有问题的,如果题主指的结束,是指方法块语句的执行结束的话,热心网友的说法是对的。但是对于线程本身,所有线程(包括主线程)在启动后都被CPU参照优先级交替调用,运行的顺序是无法预测的,但最后结束的一定是主线程。
网上有部分说法,展示的代码运行结果,“主线程先于其他线程结束,并不影响其他线程的运行”只有后半部分是对的。因为方法体(不管是自定义线程的run()还是主线程的main())中全部语句的执行完毕不代表所在线程的结束,可以用activeCount()返回当前运行的总线程数来验证这一点。另外,如果将自定义的线程对象设定为守护线程(setDeamon()),也可以很清楚看到即便main()方法中最后一句输出语句执行完毕,控制台仍会根据该自定义线程run()方法体的内容继续输出,这证明主线程还没结束——因为当线程组中只剩下守护线程时,JVM虚拟机会自动退出,如果主线程已经结束,唯一活动的线程在被设置成守护线程的情况下,程序会直接结束运行,不可能继续输出。
Ⅳ java主线程结束和子线程结束
你应该换成main函数运行,abcd就一定会打印出来了
问题并不是出在主线程和子线程身上,事实上Java似乎也没有严格主线程和子线程的概念,取而代之的是普通线程和后台线程
但是这里你采用@Test来运行代码,而@Test是JUnit测试框架使用的注解,JUnit在进行单元测试的时候,如果被@Test注释的方法执行完成,那么内部开启的线程也会被强制退出,退出是测试框架进行的操作
这和Java承诺的普通线程不退出程序就不结束是不相符的,如果书上告诉你会输出两个但是你执行了只输出了一个那么很可能就是这里出了问题
而通过main函数则没有框架干预,根据Java的规则只要有普通线程没有退出,程序就不会完全退出(System.exit强制自杀除外),那么除非创建的线程被设置成了后台线程(或者叫守护线程,daemon),那么才会在主线程退出时自动关闭这些后台线程,就是你遇到的偶尔可以输出abcd偶尔不行的效果,否则一定会abcd和efgh两个都输出,只不过输出顺序可能不一致
Ⅵ java 创建的线程为什么会结束
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这代表当该窗口被关闭时,终止JVM运行。连JVM都没有了,哪来的线程呢?
将此行改为:this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
这代表当该窗口被关闭时,销毁窗口中的所有资源。
Ⅶ java 主线程结束,子线程会结束吗
如果你说的是“进程”的话,那么就会退出。一个进程的退出,那么其里面的所有东西都会释放。 但是,如果你是在一个进程里面,建立线程P,然后再在线程P里面创建并且运行线程C1、c2等,那么,当线程P退出的时候,线程c1 c2是不会退出的。
Ⅷ java线程如何停止
通过调用interrupt方法可以使得处于阻塞状态的线程抛出一个异常,即interrupt方法可以用来中断一个正处于阻塞状态的线程;另外,改方法还会设置线程的中断状态(注:isInterrupted()可以用来查询中断状态)。
Ⅸ java多线程中,怎样知道线程执行结束
在你的主线程中用一个join的方法,你要等待谁,就用谁调用,比如,你要等待线程a结束,就用a.join();这样就可以了。记住哦,这条语句写在哪个线程里,哪个线程就要等待调用这个方法的其他线程。就是说,你在主线程里写了这条语句,那么主线程就要等待线程a执行完后,主线程才会执行。