线程的意义

首先,线程是CPU的最小调度与分配任务的单元。主要是解决进程频繁切换导致的高资源消耗与损耗,并且使得任务间相互隔离,由于线程的体量较小,所以当线程挂起时对程序的影响也较小。

进程与线程的区分

1.操作系统对其的资源管理方式不同
2.进程有独立的地址空间,所以崩溃时不会影响其他进程
3.线程是一个进程中不同的执行路径,有自己的堆栈和局部变量,没有独立的地址空间

线程生命周期(六种状态)

  1. NEW 新建状态:调用new Thread()时的状态
  2. RUNNABLE 运行状态:通过start()方法启动线程后的状态
  3. BLOCKED 阻塞状态:当线程执行synchronized代码,并且未抢占到同步锁时将会阻塞
  4. WAITING 等待状态:调用Object.wait()等方法,会让线程变为等待状态
  5. TIMED_WAITING 超时等待状态:如:sleep(timeout),超时后会自动唤醒
  6. TERMINATED 终止状态:线程的run()方法中的指令执行完成后的状态

为什么不使用stop方法终止线程

image.png

  1. 使用stop()方法停止线程会直接抛出ThreadDeath异常,导致后面的业务处理不完整
  2. stop()方法会释放synchronized()同步锁
  3. 中断线程要使用interrupt()方法

Thread中的Interrupt()方法中断线程