- 定义
进程
是指一个内存中运行中的应用程序,进程是系统进行资源分配的最小单位。
线程
进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
-
关系
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
一个进程至少包含一个线程。
Java程序的进程里至少包含主线程和垃圾回收线程(后台线程) -
进程与线程的区别
进程有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的。线程堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之
间是可以影响的。相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其
他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。 -
线程调度
计算机通常只有一个CPU时,在任意时刻只能执行一条计算机指令,每个线程只有获得CPU的使用权才能执行指令
所谓多线程并发运行,从宏观看,其实各个线程轮流获得CPU的使用权,分别执行各自的任务。那么,在可运行池中,会有多个线程处于就绪状态等到CPU,JVM就负责了线程的调度,
JVM采用的时抢占式调度,因此可能造成多线程执行结果的随机性 -
Java线程的状态
- 新建状态(New)
当线程对象对创建后,即进入了新建状态,如:
Thread thread = new Thread();
- 就绪状态(Runnable)
当调用线程对象的start()方法,线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行; - 运行状态(Running)
当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。 - 阻塞状态(Blocked)
处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:- 等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
- 同步阻塞:线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
- 其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
- 死亡状态(Dead)
线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
网友评论