00:00
各位同学,我们继续通过上一讲,我们完成了用户线程和守护线程的理论知识介绍,那么按照我们的理论实操小总结,那么接下来我们将以代码的方式给大家说明什么是用户线程和守护线程。在开始之前,我们再做一下理论知识的说明,第一个不做特别的说明,配置,默认我们六出来的线程都是用户线程,所以用户线程和守护线程它们两个的区别就是是否各自独立,是依附关系还是独立关系。那么如果两个线程都是用户线程,你结束了,不代表另外一个用户线程也会跟着结束,所谓你过你的独木桥,我走我的阳关道,大家各不相干。但是如果你是一个守护线程,守护守护自然而然,如果用户线程结束了,那么守护线程也会跟着消失,他的工作也就会结束,OK,好,那么接下来我们用代码来给大家演示一下。那么来。NEW2,那么现在我们第一个线程,那么按照。
01:03
我们的拉姆达表达式表达式。T1将其名为。好,那么判断一下。当前线程它到底是什么?那假设啊,当前线程开始运行,运行以后,我们来看看一下它呢,到底是个什么样的线程图,换一下啊。那么对于我们的线程安全的来看也是DEMO。那么来。按照我们刚才对源码的讲解和说明来看一眼。他说处,那么这个线程就是什么线程,DEMO后台的守护线程,就是部门小秘书这个角色,否则的话默认或者你不写,那么这个时候它就是什么用户线程,好,那么搁到这儿我们就是什么。守护线程,而这个就是什么用户线程好。那么说过了。守护线程是陪伴着用户线程,而用户线程是各自独立,那么所以说我这儿。
02:05
直接写个处。OK。完火以后,T1这个线程启动。那么。三秒钟以后。我们的内线程到这它肯定是个主线程,也就摁了OK,那么它呢,就是我们的主线程,好,那么同学们请看一下,现在有两个线程,一个叫T,一个叫我们第二个线程就是我们的内线程,是两个运行的线程,那么到底。P1,我们现在有没有做任何的设置,默认情况下它是守护线程呢?还是用户线程好,那么同学们看一下。程序编译并启动,大家可以看出T一开始运行了什么线程,默认不做任何设置,它是用户线程,好三秒钟以后,Main线程默认也是一个用户线程,它肯定是个用户线程嘛,它要自己启动,那么main线程已经完成,主线程已经结束了,但是大家请看,对于我T1作为用户线程,我左边这个灯我没有灭。
03:07
现在T1是一个用户线程,Main线程也是个用户线程,二者彼此各自独立,互不相干,你线程结束了,并不代表我T1线程会结束,因为我也是一个独立的用户线程,OK,好,我们从这我们可以得到我们上面的结论,默认都是什么用户线程?好,那么我们先把。这个灯关闭,那么接下来我们来做一下设置,t1.set,如果我这儿改为处,那么大家请看此时T1线程是否会从用户线程变为我们所期望的守护线程。好,那么同学们,我们再次运行。大家请看。现在T一开始运行了什么线程,守护线程三秒钟以后大家请看main线程,这个用户线程也运行完成,但是它结束以后,这个灯就灭了,所以T1作为一个守护线程,它就默默的守护着我们的用户线程,如果用户线程也结束了,守护线程也就结束,没有存在的必要了。OK,好,那么所以说这个就是我们什么实例编码的总结,那么第二步实操完成,第三步小总结,那么大家请看。
04:22
一句话,如果用户线程全部结束,意味着程序需要完成的业务操作也都全部结束了。OK,我们的业务方法已经完成,所以守护线程也会伴随着GVM一起结束,哎,这个就是用户线程和守护线程它们之间的交替和相关的知识点来。在我们在使用这个方法的时候,还要注意一个细节,这个方法必须在start方法之前设置,否则汇报不合法的线程状态异常,那什么意思呢?同学们请看,此时我T1,我设置为true,代表它是后台的什么守护线程,它在start方法之前。那假设我现在偏不。
05:04
我给他对调。T start,再来设置它是守护线程还可以吗?此时同学们请看我运行它会。得到一个什么样的结论,大家请看T一开始运行什么线程,用户线程,哎,也就是说你在我开始start方法开始执行。之后的设置我不认账,因为你你要设置就在start之前设置给我定性好了,否则我就默认我自己是什么用户线程,那么我们不妨来看一下我们这个方法它的文档的交代和说明,明确的说明了。这个方法必须被调用什么比before在这个线程。开始之前,哎,所以说呢,请大家注意,我们呢一定要了解它必须在start之前,否则就会报致现成不合法的状态异常,你不能因为理由很简单啊,我都已经start了,说明我是一个用户线程的角色了,你不能说把正在运行的常规用户线程又重新设置为守护线程,这样就自相矛盾,语法逻辑不对,好,那么同学们按照理论实操小总结三板斧就给大家说完了用户线程和守护线程,那么这一点就给大家介绍到这。
我来说两句