线程Thread
线程状态
枚举定义:enum State{}
状态值含义描述如下
- NEW: 还未启动线程的状态
- RUNNABLE: 正在运行的线程,已经在jvm中正在执行,但是可能会在等待操作系统的其他资源,比如cpu
- BLOCKED: 处于阻塞状态的线程,等待monitor lock去进入一个synchronized代码块或者方法
- WAITING: 等待线程,下列方法唤醒:wait, join, park。
- TIMED_WAITING: 线程定时的等待,下列方法触发导致:sleep, wait(long), join(long), parkNanos, parkUtil
- TERMINATED: 终止线程的状态,已完成。
核心方法
- yield: 向调度程序提示当前线程愿意让出当前hold的cpu。
- sleep: 使当前执行的线程进入睡眠状态,以指定的毫秒数为准,线程不会失去任何monitor的所有权
- start: jvm调用run方法,开启启动线程执行
- exit: 系统调用exit方法,让线程在退出之前有机会进行清理程序
- stop: 强制线程停止,检查SecurityManager状态,处理线程状态ThreadDeath
- interrupt: 线程中断自己
- destroy: 销毁线程,不需要任何的clean up
- suspend: 挂起线程,知道resume thread
- resume: 恢复一个线程
- join: 等待最多毫秒数的执行,直到线程死亡,join 0,意味着永远等待
ThreadGroup
一个线程组包含一组线程,也能包含多个线程组,形式是一棵树,除了初始线程组,每个都有父母。
在Thread默认创建方法中,该值默认为null。
ThreadLocal
此类提供线程局部变量。他们的对象对应不同的线程,有不同的线程所属变量副本。实例通常是线程私有的。
Thread类中有变量ThreadLocal.ThreadLocalMap threadLocals。
ThreadLocalMap数据结构中,并未使用hashMap数据结构,而是自定义了一个数据结构,除了ThreadLocal并未暴露操作方法,主要是为了帮助解决非常大的引用对象,hash table entries的key主要是使用了弱引用。
Entry extends WeakReference:Entry为弱引用,并且始终为ThreadLocal对象,如果entry.get() == null,则代表不在引用该key,可删除。
弱引用
弱引用,当发生gc时,无关内存是否占满,都会gc掉该引用的对象。但如果发生.get()方法执行,则会由弱引用变成强引用。