线程的状态
NEW 初始状态
RUNNABLE 运行状态
BLOCKED 阻塞状态 线程阻塞于锁
WAITING 等待状态
TIME_WATING 超时等待状态
TERMINATED 终止状态
线程的创建
父线程分配空间创建子线程,子线程继承父线程的相关属性参数,初始化线程对象在堆内存中等待运行。
当线程初始化后,调用start()方法启动线程,start()的作用在于调用方线程通知java虚拟机,只要线程规划器空闲,就应立即启动调用start()方法的线程。
线程中断
通过调用线程的interrupt()方法来中断线程。线程通过isInterrupted()来判断线程是否被中断。当抛出InterruptedExcepton发生线程中断时,中断标志位会被清除,此时isInterrupted()会返回false。通过interrupt()方法不会立即中断线程,而是使线程在终止时有机会清理相应的资源,并安全优雅的停止线程。
另一种安全的中断线程的方法是,通过一个volatile修饰的内存可见性的变量作为标志符,而通过改变标识符来通知停止线程。
ThreadLocal
可以理解为线程的私有变量,其本质是为每个线程提供独立的变量副本,就像local一样。当线程结束时该变量副本也会被GC回收掉。