前言
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
一.什么是进程
操作系统中运行的程序,是操作系统管理的最小单位,进程是一个动态的实体,它是程序的一次执行过程。
程序:二进制文件,静态 /bin/date /usr/bin/sshd
进程:是程序运行的过程,动态,有生命周期和运行状态
二.线程状态
1.新建(NEW):新创建了一个线程对象。
2.可运行(RUNNABLE):线程对象创建后,其他线程调用了该对象的start方法,该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。
3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。
4.阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出cpu timelice,暂时停止运行,直到线程进入可运行(runnable)状态,才能有机会再次获得cpu timeslice转到运行(running)状态。
等待阻塞:运行(running)的线程执行o.wait方法,JVM会把该线程放入等待队列(waitting queuq)中。
同步阻塞:运行(running)的线程在获取对象的同布锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
其他阻塞:运行(running)的线程执行thread.sleep(longms)或t.join方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态,当sleep状态超时、join等待线程终止或者超时或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
5.死亡(DEAD):线程run、main方法执行结束,或者因异常退出run方法,则该线程结束生命周期,死亡的线程不可再次复生。