线程状态

  1. 新建:创建后尚未启动的线程处于这种状态
  2. 运行:运行状态包括操作系统中的运行态和就绪态,也就是说这个状态下的线程可能正在执行,也有可能在等待CPU为它分配执行时间;
  3. 无限期等待:处于这种状态的线程不会被分配CPU,它们要被其它进程显式唤醒。可能进入这种状态的操作有:
    • 没有设置时间参数的wait和join方法;
    • LockSupport.park()方法;
  4. 限期等待:处于这种状态的线程也不会被分配执行时间,不过不需要其它线程唤醒,等一段时间之后就会由系统自动唤醒。可能进入这种状态的有:
    • 设置了时间参数的wait和join方法;
    • sleep方法;
    • LockSupport.parkNanos()方法、LockSupport.parkUntil()方法;
  5. 阻塞状态:线程被阻塞了,阻塞状态和等待状态的区别是:阻塞状态在等待着获得一个排它锁。而等待状态则是在等待一段时间,或者唤醒动作发生。在程序进入同步区域的时候,线程将进入这种状态。
  6. 结束:已终止线程的线程状态,线程已经结束执行。

线程安全

当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象是线程安全的。