进程:一般来说启动了一个应用程序就会启动一个进程,当然有时候也会启动多个进程。比如说启动了QQ的时候除了启动QQ.exe,还会启动一个QQProtect.exe和TXPlatform.exe进程。每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。进程是内存资源分配的基本单位。
线程:线程是进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存空间。线程是CPU分配的基本单位。
线程在它的生命周期中会处于各种不同的状态:新建、就绪、运行、阻塞、死亡。
1. 新建(New)
用new语句创建的线程对象处于新建状态,此时它和其他java对象一样,仅被分配了内存。仅仅作为一个对象实例存在。
2.就绪(Ready)
当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态。处于这个状态的线程位于Java虚拟机的可运行池中,等待cpu的使用权。
3. 运行状态(Running)
处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。
只有处于就绪状态的线程才有机会转到运行状态。
4. 阻塞状态(Blocked)
阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,直到线程重新进入就绪状态,它才会有机会获得运行状态。
5 .死亡状态(Dead)
当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。