主线程和子线程结束的关系

如题所述

第1个回答  2022-07-14
线程是一个动态执行的过程,它也有一个从产生到死亡的过程。

主线程从main()方法开始执行,直到main()方法结束后停止JVM。如果主线程中启动了子线程,默认会等待被启动的所有线程都执行完run()方法才终止JVM。

实际上我们可以通过Thread方法来改变主线程和子线程退出的关系。

        如果一个Thread被标志位Daemon线程(守护线程),则所有的非Daemon线程都结束时,JVM才终止。因为从main()方法开始的就是一个非Daemon线程,我们可以将子进程标记为Daemon进程,这样主线程退出时,子线程也会跟着退出。

       默认所有从Daemon线程产生的线程也是Daemon线程,在产生这些新线程的线程停止时,也应该一并跟着停止。

主线程等待启动的子线程都结束之后再结束,只需要在主线程流中启动子线程后,子线程实例调用join()方法。它的意思是子线程使用join()方法加入至当前主线程的流程中,主线程会等待被加入的线程工作完毕,然后再继续它的动作。如

        public static voidmain(String[] args) {

                            Threadt=new Thread(()->{

         // 方法操作

});

t.start();

try{

          t.join();

}catch(InterruptedException e){

         e.printStackTrace();

}

}

       注意join方法需要进行异常捕捉,否则编译报错:

error: unreportedexception InterruptedException; must be caught or declared to be thrown

程序启动后,主线程就开始,在主线程中新建t,并在启动t后,将之加入(join())主线程流程中,所以t会先执行完毕,主线程才会继续原来的流程。

有时候加入的线程可能处理太久,我们可以设定该线程的处理时间,方法就是给join()传入一个整数值n(单位毫秒),表示加入的流程至多可处理n毫秒,过了这个时间,即使没执行完,也不理他了,主线程可继续执行原来的工作流程。

                                                                System.exit(0);

线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。

主线程和子线程结束的关系
主线程等待启动的子线程都结束之后再结束,只需要在主线程流中启动子线程后,子线程实例调用join()方法。它的意思是子线程使用join()方法加入至当前主线程的流程中,主线程会等待被加入的线程工作完毕,然后再继续它的动作。如         public static void...

python子线程崩溃会影响主线程么
会的。当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行的最小单位,当设置多线程时,主线程会创建多个子线程,在Python中,默认情况下就是setDaemon(False),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束。Python是一种广泛使用的解释型、高...

java 线程激活和终止,主线程和子线程之间的关系
Thread、Runnable的开启的线程是主线程下的子线程,是父子关系,此时该java程序即为多线程的,这些线程共同进行资源的调度和执行。

关于python多线程的一些问题。
子线程是守护线程:当主线程结束时,子线程也结束(不管子线程工作有没有完成)。join作用是线程同步,是让主线程等待子线程结束才结束(主线程完成工作了也不结束,阻塞等待,等子线程完成其工作才一起结束)。相信此时你已经懂你的两个问题了。没加join的时候主线程结束了,所以命令提示符>>>就出来了...

主线程什么都没做,就会等待子线程结束。这是为什么?
你这不是主线程等子线程。实际情况是主线程已经执行完退出了,子线程耗时较长,后完成。如果要想等子线程执行完再继续执行,可以使用join。如果要想主线程退出时子线程也尽快结束,可以使用伴随线程。

java 主线程已经执行完了,为什么子线程还在运行
其实是子线程运行结束后主线程才退出的。因为是子线程开启后,主线程和子线程的代码同时继续运行。当主线程的代码全部执行完后,若子线程还没执行完,主线程会等待子线程执行结束后退出程序。

线程正常结束的标志
线程不再被调度器调度:如果线程被调度器取消了它的运行,那么我们可以说它已经结束了。这可能是由于线程主动停止运行,或者由于系统资源不足或错误等原因导致线程被取消。线程调用了`join()`方法:当一个线程调用了另一个线程的`join()`方法时,主线程会等待该子线程完成后再结束。当子线程完成其任务...

linux 多线程生命期
不行,因为主线程结束了整个进程也就结束了,其他的子线程也就跟着结束了。解决办法只有两个:1.改用多进程实现你的程序功能。代价是进程间通信的开销会比线程大。2.利用pthread_join让主线程一直等待直到等待的线程结束自己才结束。

按键精灵主线程停了子线程怎么还在运行
子线程是独立于主线程之外的另一个线程。根据查询百度经验得知,在按键精灵中,启动某个线程后,主线程停止了并不意味着子线程也会停止,因为子线程是独立于主线程之外的另一个线程,具有独立的执行栈和执行空间。同时需要注意多线程之间的同步和数据传递。按键精灵是一款模拟鼠标键盘动作的软件。通过制作...

子线程死了后,导致程序死了,怎样在主线程中杀掉子线程。
主进程没有CPU时间,导致子线程也没有CPU时间,所以死的是主进程.

相似回答
大家正在搜