线程与进程区别---线程与多线程---多线程的注意点---线程的状态与生命周期---线程的状态与生命周期

进程: 是一个程序在其自身的地址空间中的一次执行活动,是程序独立运行的基本单位。
线程: 是进程的一部分,程序执行中的一个执行路径(子任务),一个进程可以多个线程,如:Eclipse在输入代码时可以校验。
区别与联系:
   一个进程可以包含多个线程,一个线程对应进程中的一条执行路线 。

即:进程包含线程、线程构成进程


线程是程序执行中的一个执行路径(子任务)。
多线程是指程序中包含多条执行路径。
大多数程序只有一条执行路线,但现实世界中的很多过程都是同时发生的,对应这种情况,可编写有多条执行路径的程序,使得程序能够同时执行多个任务(并行)。 

多线程机制使得程序的多个子任务能够“同时”执行


(1)多线程需要操作系统的支持,不是所有类型的计算机都支持多线程应用。
(2)在应用程序中使用多线程不会增加 CPU 的数据处理能力,但可以增加CPU的利用率,改善程序的效率。 
(3)单CPU(单核)系统上运行多线程程序,并不能真正做到多个线程的同时运行。
(4)单CPU(多核)或多CPU系统上运行多线程程序,可以做到多个线程的同时运行,可以大大增强多线程程序的效率。


Java线程的生命周期中一共有五个状态:

①新建状态              

②就绪状态           

③运行状态

④阻塞状态              

⑤终止状态

下图是五个状态的状态转换示意图:



(1)新建状态
  即创建一个新的线程对象(new Thread)。当一个线程处于创建状态时,系统不为它分配资源。 
     Thread myThread = new Thread( );
(2)就绪状态
  Java通过start方法启动处于新建状态的线程对象,使其进入就绪状态。处于就绪状态的线程已经具备了运行条件,将进入线程队列等待系统为其分配CPU,一旦获得了CPU,线程就进入运行状态,并调用自己的run方法。 

     myThread.start();

(3)运行状态
       处于就绪状态的线程被调度并获得CPU资源后即进运行状态,每一个Thread类及其子类的对象都有一个run()方法,当线程对象被调度执行的时候,它将自动调用本对象的run()方法。 

      注意:线程的操作应该写到run()方法中。

(4)阻塞状态

        一个正在执行的线程如果在某些特殊情况下,如被人为挂起或它的CPU时间片耗尽时,将让出CPU并暂时中止自己的执行,进入阻塞状态。

       阻塞时它不能进入排列队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续执行。 
(5)终止状态

      终止状态是线程生命周期的最后一个阶段。线程完成全部工作后会正常结束运行,或线程被强制性的终止。