Java多线程(详细)

1.进程与线程的关系

        由于进程与线程有很浓厚的关系,所以推荐先看Java多进程(详细)

        对于多线程的编程推荐看多线程代码实现

        进程是操作系统进行资源分配的基本单位,线程是操作系统进行调度执行的基本单位

        操作系统创建线程时会先创建进程,给进程分配好资源,再在进程中创建线程(进程与线程之间的关系可以认为是进程包含了线程)线程直接复用进程这里分配到的资源

        一个进程至少要包含一个线程,最初创建出的一个线程,可以视为是一个只包含一个线程的进程,此时创建的过程需要分配资源,创建的开销比较大,但后续在这个进程中创建线程,就可以省略分配资源的过程,线程之间共用进程分配到的资源即可

2.线程对于进程的优势

        线程和进程都是为了完成多并发编程的结构,但是进程由于创建和销毁都要分配资源和释放资源,所以消耗比较大,引入线程可以高效的解决这个问题。

        所谓线程,也可以称为轻量级进程,一个进程中可以包含一个线程也可以包含多个线程,这个进程中的多个线程,共同复用进程中的各种资源(内存,硬盘),但是这些线程各种独立的在cpu上进行调度

        因此线程即可以完成“并发编程”的效果,又可以以比较轻量的方式运行

3.线程的描述

        读过文章开头推荐的博客便知道,对于进程的描述用的是PCB(进程控制块),但在Linux中对于线程的描述也用的是PCB(进程控制块)这个结构体来描述线程

        为什么描述线程和描述进程的结构体名称相同呢,可能是Linux的设计师偷懒了,直接复用了描述进程的结构体PCB来描述线程

        此时概念就变成了PCB对应一个线程,多个PCB对应一个进程了

        由于在同一个进程中的线程共用一份资源,所以这些线程的PCB中,内存指针和文件描述符表这两个字段的内容是相同的,但是上下文,状态,优先级,记账信息这些支持调度的属性就是不同的

4.线程的注意事项

        1.线程的数量也不能太多,线程要是太多的话,线程调度的开销反而会拖慢整个程序的效率

        2.线程的独立性没有进程高,一旦莫一个线程在执行过程中出现异常,并且这个异常没有被很好的处理,此时,就可能会导致整个进程直接终止(进程中的所有线程也随之终止)

        3.不一定说线程就比进程好,确实多线程更加的轻量,创建销毁的速度更快,但是也有缺点不像进程那么稳定

5.让线程更加的轻量的方法

        1.轻量级线程-->纤程/协程

                但java标准库目前还没有内置,但像Go语言就天然支持纤程

        2.线程池

                池是计算机中一个非常经典的思想方式

                把一些要释放的资源,不要着急释放,而是先放到一个池子里,以备后续的使用

                申请资源的时候,也是先提前把要申请的资源申请好放到一个池子里,后续申请的时候更加方便

你可能感兴趣的:(java,开发语言)