铁匠 铁匠
首页
收藏
java
架构之路
常用算法
  • Java
  • nginx
  • 系统运维
  • 系统安全
  • mysql
  • redis
参考文档
关于
链接
  • 分类
  • 标签
  • 归档

专注、不予评判地关注当下
首页
收藏
java
架构之路
常用算法
  • Java
  • nginx
  • 系统运维
  • 系统安全
  • mysql
  • redis
参考文档
关于
链接
  • 分类
  • 标签
  • 归档
  • java api 文档
  • 集合

  • 版本特性

  • jvm

  • 网络编程

  • 并发编程

    • 并发编程三大特性
    • 线程的基本概念
      • java 线程生命周期
    • 如何正确停止一个线程
    • java线程池
    • 线程池大小设置多少合适
    • java 常用队列
    • 使用 Semaphore 实现一个简单限流器
  • java
  • 并发编程
fengjx
2022-11-05
目录

线程的基本概念

# java 线程生命周期

状态类型在枚举类java.lang.thread.State中定义

  • NEW-新建:线程刚创建,还没有启动
  • RUNNABLE-就绪:可运行(已进入cpu就绪队列,等待分配时间片)或正在运行
  • BLOCKED-阻塞:等待其他线程释放锁
  • WAITING-等待:进入条件等待状态,调用线程的wait方法进入等待状态,调用notify方法线程继续工作,典型应用:生产者与消费者线程
  • TIMED_WAITING-计时等待:与WAITING类似,TIMED_WAITING有时间限制,即:在调用wait方法时,传入一个时间
  • TERMINATED-终止:线程正常退出或者异常退出,不可再次启动

java 线程的RUNNABLE状态,包括了曹组系统线程的就绪和运行状态。

操作系统线程的阻塞状态,包括了 java 的线程的BLOCKED、WAITING和TIMED_WAITING三个状态。

状态转换

  • NEW -> RUNNABLE
    • 调用了Thread.start()方法
  • RUNNABLE -> BLOCKED
    • 等待或则synchronized隐式锁
  • RUNNABLE -> WAITING
    • 调用 Object.wait()进入 WAITING 状态,调用 Object.notify()、Object.notifyAll() 进入 RUNNABLE 状态
    • Thread.join(),a 线程代码上调用 b.join()(b 此时是 WAITING),在 a 运行结束之后 b 继续执行(b 进入 RUNNABLE)
    • LockSupport.park()会进入 WAITING 状态,再调用 LockSupport.unpark(Thread thread) 会进入 RUNNABLE 状态
  • RUNNABLE -> TIMED_WAITING
    • Thread.sleep(long millis)
    • Object.wait(long timeout)
    • Thread.join(long millis)
    • LockSupport.parkNanos(Object blocker, long deadline)
    • LockSupport.parkUntil(long deadline)
  • RUNNABLE -> TERMINATED
    • 线程执行完 run() 方法后,自动转换到 TERMINATED 状态
#并发编程
并发编程三大特性
如何正确停止一个线程

← 并发编程三大特性 如何正确停止一个线程→

最近更新
01
策略模式
01-09
02
模板方法
01-06
03
观察者模式
01-06
更多文章>
Theme by Vdoing | Copyright © 2016-2023 铁匠 | 粤ICP备15021633号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式