关于线程:java线程小结

2次阅读

共计 1139 个字符,预计需要花费 3 分钟才能阅读完成。

  • 线程状态

NEW

顾名思义,这个状态,只存在于线程刚创立,未 start 之前

RUNNABLE

这个状态的线程,其正在 JVM 中执行,然而这个 ” 执行 ”,不肯定是真的在运行,也有可能是在期待 CPU 资源。所以,在网上,有人把这个状态辨别为 READY 和 RUNNING 两个,一个示意的 start 了,资源一到位随时能够执行,另一个示意真正的执行中

BLOCKED

这个状态,个别是线程期待获取一个锁,来继续执行下一步的操作,比拟经典的就是 synchronized 关键字,这个关键字润饰的代码块或者办法,均须要获取到对应的锁,在未获取之前,其线程的状态就始终未 BLOCKED,如果线程长时间处于这种状态下,咱们就是当心看是否呈现死锁的问题了。

WAITING

一个线程会进入这个状态,肯定是执行了如下的一些代码,例如

  • Object.wait()
  • Thread.join()
  • LockSupport.park()
    当一个线程执行了 Object.wait()的时候,它肯定在期待另一个线程执行 Object.notify()或者 Object.notifyAll()。
    或者一个线程 thread,其在主线程中被执行了 thread.join()的时候,主线程即会期待该线程执行实现。当一个线程执行了 LockSupport.park()的时候,其在期待执行 LockSupport.unpark(thread)。当该线程处于这种期待的时候,其状态即为 WAITING。须要关注的是,这边的期待是没有工夫限度的,当发现有

TIMED_WAITING

这个状态和 WAITING 状态的区别就是,这个状态的期待是有肯定时效的,即能够了解为 WAITING 状态期待的工夫是永恒的,即必须等到某个条件合乎能力持续往下走,否则线程不会被唤醒。然而 TIMED_WAITING,期待一段时间之后,会唤醒线程去从新获取锁。当执行如下代码的时候,对应的线程会进入到TIMED_WAITING 状态

  • Thread.sleep(long)
  • Object.wait(long)
  • Thread.join(long)
  • LockSupport.parkNanos()
  • LockSupport.parkUntil()

TERMINATED

即为线程执行完结之后的状态

创立线程的三种形式:

  • 继承自 Thread 类
  • 实现 Runnable 接口
  • 实现 Callable 接口

举荐应用第二种

保障高并发场景下的线程平安,能够从一下四个维度考量

  • 数据单线程内可见。单线程总是平安的 ThreadLocal 就是采纳这种形式来实现线程平安的。
  • 只读对象。
  • 线程安全类。
  • 同步与锁机制

java.util.concurrent 包下的分类

  • 线程同步类
  • 并发汇合类
  • 线程治理类
  • 锁相干类

参考资料:Java 线程的 6 种状态剖析

《码出高效 Java 开发手册》

正文完
 0