Thread

211 阅读2分钟
Thread: {程序的多个执行路径,执行调度的单位且依托于进程存在}
  •  指针,指向当前被指向指令的指针
  •  栈,建立线程时被分配,保存线程内部的数据,是属于自己的内存空间
  •  寄存器值,正在执行线程的处理器状态的值

抢占式,多任务处理、将时间切片、时间间隔以毫秒为精度且长度并不固定,每个时间片仅服务于单独一个线程,线程的迅速执行造成了它们在同时运行的假象


Define a thread

  1. 实现java.lang.Runnable
  2. 继承java.lang.Thread

Thread state



  1. New:{至今尚未启动的线程处于这种状态} 当一个线程的实例被创建,此时该线程处于新生(new)状态,当前有自己的内存空间,但该线程并没有运行「not alive」
  2. Runnable:{可运行线程的线程状态} 调用线程实例的start()启动线程使线程进入就绪状态,处于就绪状态的线程已经具备了运行条件,但还没有被分配到CPU即不一定会被立即执行,此时处于线程就绪队列,等待系统为其分配CPU 「alive」
  3. Running: {正在运行的状态}一旦获取CPU(被JVM选中),线程就进入运行状态,run()才开始被执行。在运行状态的线程执行自己的run()方法中的操作,直到调用其他的方法而终止、或者等待某种资源而阻塞、或者完成任务而死亡;如果在给定的时间片内没有执行结束,就会被系统给换下来回到线程的等待状态;此时线程是活着的 「alive」
  4. Waiting:{某一等待线程的线程状态} |Timed_Waiting {具有指定等待时间的某一等待线程的线程状态}
  5. Blocked:{受阻塞并且正在等待监视器锁的某一线程的线程状态}通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞(blocked)状态(alive)
  6. Dead:run()方法运行完毕或被中断或被异常退出,该线程到达死亡状态。此时可能仍然存在一个该Thread的实例对象,当该Thready已经不可能在被作为一个可被独立执行的线程对待了,线程的独立的call stack已经被dissolved。一旦某一线程进入Dead状态,他就再也不能进入一个独立线程的生命周期了「not alive」