线程、进程基本概念:
        进程是对运行程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发;

        线程是进程的子任务,是cpu调度和分配的基本单位,用于保证程序的实时性,实现进程内部的并发,线程是操作系统可识别的最小执行的调度单位。

两者的区别:
1、一个线程只能够属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。

2、进程在执行的过程中拥有独立的内存单元,而多个线程共享进程的内存。

3、进程是资源分配的最小单位,线程是cpu调度的最小单位。

4、系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。
 

进程的五种状态

java 等待异步执行结果怎么写_死锁

 创建状态:进程在创建时需要申请一个空白的PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

就绪状态:进程已经准备好,已分配到所需资源,只要分配到就能CPU够立即运行

执行状态:进程处于就绪状态被调度后,进程进入执行状态

阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

java中的线程五种状态

状态图如下所示:

java 等待异步执行结果怎么写_进程_02


 1、new 新创建一个线程的对象

 2、可运行:线程创建对象之后,其他的线程调用该对象的start方法,该线程的状态可能在线程池中,等待线程池调度选中,获取CPU中的使用权

 3、运行:获得CPU的使用权限后,执行程序中的代码

 4、阻塞:阻塞状态是线程因为某种原因放弃了使用CPU的权限,阻塞的三种情形

       (a). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
        (b). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
        (c). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

         d)线程试图取得一个同步监视器,该同步监视器被其他的线程所占用的

        等到线程再次的进行调度的时候,其几种的状态如下

                a)线程的sleep时间到啦

                b)线程获得了同步监视器

                c)线程等到了notify的通知

                d)线程的wait的时间结束

                e)线程的加塞过程结束

                f)线程被恢复啦

5、线程死亡:线程run()、main()方法执行结束。

死锁

        指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。

竞争资源

        系统中的资源可以分为两类:
                可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺, CPU和主存均属于可剥夺性资源;
                不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。
                不可剥夺资源(例如:系统中只有一台打印机,可供进程P1使用,假定P1已占用了打印机,若P2继续要求打印机打印将阻塞)
        产生死锁中的竞争资源另外一种资源指的是竞争临时资源(临时资源包括硬件中断、信号、消息、缓冲区内的消息等),通常消息通信顺序进行不当,则会产生死锁

其二就是进程之间的顺序非法

产生死锁的4个必要条件

        1、互斥条件:进程要求分配的资源进行排他的控制,在一段时间内的资源仅为线程所占用的

        2、请求和保持条件:当进程的请求资源进行阻塞的,已经获得的资源保持不放

        3、不可剥夺,进行已经获得资源在未使用之前, 不可剥夺,只能够在使用完成之后进行自己释放

        4、环路等待:进程-资源环形等待的情况的

要解决死锁的就要从这4个条件进行解决

        资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
        只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
        可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
        资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)