概念:
程序
:一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。计算机需要加载代码,同时也要加载数据。进程
:进程是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。进程是程序真正运行的实例,若干进程可能与同一个程序相关,且每个进程皆可以同步或异步的方式独立运行。线程
:线程是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是行程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务,线程是独立调度和分派的基本单位。- 特点:
轻型实体,独立调度和分派的基本单位,可并发执行
,共享进程资源
。 进程线程区别联系
:线程是进程划分成的更⼩的运⾏单位。线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。从另⼀⻆度来说,进程属于操作系统的范畴,主要是同⼀段时间内,可以同时执⾏⼀个以上的程序,⽽线程则是在同⼀程序内⼏乎同时执⾏⼀个以上的程序段。
线程状态:
▪ 新生状态
(New)
用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。
▪ 就绪状态
(Runnable)
处于就绪状态的线程已经具备了运行条件,但是还没有被分配到CPU,处于“线程就绪队列”,等待系统为其分配CPU。就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。
有4种原因会导致线程进入就绪状态
:
-
新建线程:调用start()方法,进入就绪状态;
-
阻塞线程:阻塞解除,进入就绪状态;
-
运行线程:调用yield()方法,直接进入就绪状态;
-
运行线程:JVM将CPU资源从本线程切换到其他线程。
▪ 运行状态
(Running)
在运行状态的线程执行自己run方法中的代码,直到调用其他方法而终止或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些“导致阻塞的事件”而进入阻塞状态。
▪ 阻塞状态
(Blocked)
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。
有4种原因会导致阻塞
:
-
执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。当指定的时间到了后,线程进入就绪状态。
-
执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后,它进入 就绪状态。
-
线程运行时,某个操作进入阻塞状态,比如执行IO流操作(read()/write()方法本身就是阻塞的方法)。只有当引起该操作阻塞的原因消失后,线程进入就绪状态。
-
join()线程联合: 当某个线程等待另一个线程执行结束后,才能继续执行时,使用join()方法。
▪ 死亡状态
(Terminated)
死亡状态是线程生命周期中的最后一个阶段,当一个线程进入死亡状态以后,就不能再回到其它状态了。
线程死亡的原因有两个
:
-
正常运行的线程完成了run()方法内的全部工作;
-
程被强制终止,如通过执行stop()或destroy()方法来终止一个线程(已过时)