Java并发(二):基本线程机制之再续前缘

Java并发(二):基本线程机制之再续前缘

此篇笔记为上一篇笔记:Java并发(一):并发的多面性与基本的线程机制前缘中,Java并发的基本线程机制的后续。

  1. 后台线程
    所谓后台(daemon)线程,是指在程序运行的时候在后台提供的一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会kill掉进程中所有的后台线程
    在这里插入图片描述
    必须在线程启动之前调用setDaemon()方法,才能将线程设置为后台线程。
    如果一个线程为后台线程,那么在该线程中创建的任何线程都会自动设置成后台线程。
    在这里插入图片描述
    需要注意的是,后台线程中的finally子句并不会执行,原因在于当最后一个非后台线程终止时,后台程序会突然终止,JVM会立即关闭所有后台进程并且是以一种粗暴的形式进行关闭
    非后台的Executor通常是一种更好的方式,因为Executor控制的所有任务可以同时被关闭,并且关闭是有序的

  2. 直接继承Thread实现线程
    在非常简单的情况下,可以直接从Thread继承的方式来实现线程。
    在这里插入图片描述
    事实上,实现接口的方式会更好一些,原因在于:
     Java不支持多重继承,因此继承了Thread类就无法继承其他类,但可以实现多个接口;
     类可能只要求执行就行,继承整个Thread类开销过大

  3. 加入一个线程
    一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。如果某个线程在另一个线程t上调用t.join(),此线程将被挂起,直到目标线程t结束才恢复。
    在这里插入图片描述
    可以在调用join()时带上一个超时参数,这样如果目标线程在这段时间到期时还没有结束的话,join()方法总能返回
    对join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法,这时需要用到try-catch子句。
    在这里插入图片描述

参考资料:《Java编程思想》

原创文章 78 获赞 25 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/89979103