美文网首页
主线程和子线程结束的关系

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

作者: mysimplebook | 来源:发表于2020-06-14 11:50 被阅读0次

线程是一个动态执行的过程,它也有一个从产生到死亡的过程。

主线程从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);

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

相关文章

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

    线程是一个动态执行的过程,它也有一个从产生到死亡的过程。 主线程从main()方法开始执行,直到main()方法结...

  • java主线程结束和子线程结束之间的关系

    情况1:正常情况下,主线程启动了子线程,主线程、子线程各自执行,彼此不受影响。 当你在run一个Java appl...

  • GCD

    GCD 队列与线程的关系 主队列和主线程 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主...

  • 多线程

    主线程和子线程的关系这篇文章说的一点就是守护线程,这里介绍守护线程

  • 10.线程间通信:join

    假设有这样一个场景,在主线程中我们启动了一个子线程做复杂运算,因为比较耗时,主线程会先于子线程结束。现在我们想在主...

  • Runloop 和线程的关系?

    Runloop 和线程的关系? 一个线程对应一个 Runloop。 主线程的默认就有了 Runloop。 子线程的...

  • Android 开发艺术探索读书笔记 11 -- Android

    本篇文章主要介绍以下几个知识点:主线程和子线程Android 中的线程形态Android 中的线程池 11.1 主...

  • 线程join方法

    某些情况、主线程中启用了子线程,如果子线程需要大量的算法,需要运算的时间较长,主线程可能会在子线程结束前就结束,这...

  • iOS面试题合集(Runloop篇)

    1.Runloop 和线程的关系? 一个线程对应一个 Runloop。主线程的默认就有了 Runloop。子线程的...

  • 多线程练习

    一个进程结束的前提为进程内所有线程结束。结束子线程-->让子线程中的任务结束(就是让run方法结束:结束循环多用添...

网友评论

      本文标题:主线程和子线程结束的关系

      本文链接:https://www.haomeiwen.com/subject/mkjxxktx.html