结合多本著作和个人开发经验,整理Java多线程入门手册( 四 )


  • Object.wait():使当前线程处于等待状态直到另一个线程唤醒它;
  • Thread.join():使当前线程等待另一个线程执行完毕之后再继续执行,底层调用的是 Object 实例的 wait() 方法;
  • LockSupport.park():除非获得调用许可,否则禁用当前线程进行线程调度
5)TIMED_WAITING:超时等待状态 。线程等待一个具体的时间,时间到后会被自动唤醒 。
调用如下方法会使线程进入超时等待状态:
  • Thread.sleep(long millis):使当前线程睡眠指定时间,sleep() 方法不会释放当前锁,但会让出 CPU,所以其他不需要争夺锁的线程可以获取 CPU 执行;
  • Object.wait(long timeout):线程休眠指定时间,等待期间可以通过 notify() / notifyAll() 唤醒;
  • Thread.join(long millis):等待当前线程最多执行 millis 毫秒,如果 millis 为 0,则会一直执行;
  • LockSupport.parkNanos(long nanos): 除非获得调用许可,否则禁用当前线程进行线程调度指定时间;
  • LockSupport.parkUntil(long deadline):同上,也是禁止线程进行调度指定时间;
6)TERMINATED:终止状态 。此时线程已执行完毕 。
其实等待和锁定状态可以被笼统的称为阻塞状态,就是停着不动了嘛,在回答面试题时建议回答6种状态版本,就是是JDK源码中定义的,一来有官方支持,二来证明咱看过一点源码 。
状态转换
  • 新建状态的线程调用start方法进入到运行状态
  • 运行状态线程如果遇到Object.wait()、Thread.join()或者LockSupport.park()方法则会放弃CPU执行权进入等待状态,这个装需要被唤醒之后才会再次进入就绪状态获得到CPU时间片进入运行状态
  • 运行状态的线程遇到Thread.sleep(long)、Object.wait(long)、Thread.join(long)等方法,也就是可以传入时间的,就会进入超时等待状态,达到时间之后就会自动进入就绪状态,当CPU执行就进入运行状态
  • 运行状态的线程如果被同步代码块或者同步方法包裹,执行时如果释放锁资源,就会进入阻塞状态或者叫锁定状态,只有再次获取到锁资源时才会进入就绪状态,等到CPU时间片后进入运行状态
  • 执行完的线程就会进入终止状态,线程结束
线程之间的状态转换可以参考下图
结合多本著作和个人开发经验,整理Java多线程入门手册

文章插图
Thread类详解成员变量 变量名
类型
作用
name
volatile String
线程名称
priority
int
线程的优先级,默认为5,范围1-10
threadQ
Thread
 
eetop
long
 
single_step
boolean
是否单步执行
daemon
boolean
守护线程状态,默认为false
stillborn
boolean
JVM状态,默认为false
target
target
将被执行的Runnable实现类
group
ThreadGroup
当前线程的线程组
contextClassLoader
ClassLoader
这个线程上下文的类加载器
inheritedAccessControlContext
AccessControlContext
该线程继承的AccessControlContext
threadInitNumber
static int
用于匿名线程的自动编号
threadLocals
ThreadLocal.ThreadLocalMap
属于此线程的ThreadLocal,这个映射关系通过ThreadLocal维持
inheritableThreadLocals
ThreadLocal.ThreadLocalMap
这个线程的InheritableThreadLocal,其映射关系通过InheritableThreadLocal维持
stackSize
long
此线程的请求的堆栈的大小,如果创建者的请求堆栈大小为0,则不指定堆栈大小,由jvm来自行决定 。一些jvm会忽略这个参数 。
nativeParkEventPointer
long
在本机线程终止后持续存在的jvm私有状态 。
tid
long
线程的ID
threadSeqNumber
static long
用于生成线程的ID
threadStatus
volatile int
java线程状态,0表示未启动
parkBlocker
volatile Object
提供给LockSupport调用的参数
blocker
volatile Interruptible


推荐阅读