要了解线程,首先要知道进程是什么。
进程
进程的概念: 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时,系统会就会创建一个进程,并为它分配资源,然后把这个进程放在进程就绪队列中,进程调度器选中它时,就会为它分配CPU时间,程序开始真正运行。
进程间的通信方式:
- 消息传递
- 共享存储
- 管道通信
线程
线程的概念: 线程时进程中的一个执行流程,一个进程可以有多个线程 (至少一个) 。一个进程可以启动多个线程。
线程的生命周期:
- 新建状态: 此时新建对象不能运行,和其他Java对象一样,仅仅是由JVM分配了内存,没有表现出任何线程的动态特征。
- 就绪状态: 当线程调用start()方法后,该线程进入就绪状态,此时线程进入可运行池中,等待CPU的资源。
- 运行状态: 处于就绪状态的的线程获得CPU执行权后,开始执行run()方法中的线程执行体,则该线程处于运行状态。注意:只有在就绪状态的线程才可能进入运行状态。
- 阻塞状态: 正处于运行状态的线程遇到某些特殊情况时,会放弃CPU执行权,进入阻塞状态。当引起特殊情况的原因被解除后,线程进入就绪状态,回到可运行池中,重新等待系统调度的CPU执行权。
- 死亡状态: 当run()方法执行完毕,或者线程抛出一个未捕获的异常 或者 错误 的时候,线程就会进入死亡状态了,进入死亡状态的线程不再拥有运行的资格,也不能转换到其他状态。
注意:如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。
线程和进程的关系
- 一个进程可以有多个线程,至少有一个线程;
而一个线程只能在一个进程的地址空间内活动。 - 资源分配给进程,同一个进程的所有线程共享该进程的所有资源。
- CPU分配资源给线程,即真正在处理器运行的是线程。
- 线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的方法实现同步。