java线程的状态及状态间的切换

java线程的状态及状态间的切换
www.zeeklog.com  - java线程的状态及状态间的切换

在 Java 5 以后,线程状态被明确定义在其公共内部枚举类型 java.lang.Thread.State 中。

分别是:

  1. NEW(初始化状态)
  2. RUNNABLE(可运行 / 运行状态)
  3. BLOCKED(阻塞状态)
  4. WAITING(无时限等待)
  5. TIMED_WAITING(有时限等待)
  6. TERMINATED(终止状态)

其中,Java 层面中的 BLOCKED、WAITING、TIMED_WAITING 对应到操作系统层面,都是休眠状态。也就是说,线程处于这三种状态之一,那么该线程就不会拥有 CPU 的使用权。

NEW 到 RUNNABLE

刚 new 出来的 Thread 对象、且未调用 start(),就处于 NEW 状态,此时还不会执行。当调用了 start() 后,线程就从 NEW 状态转换到 RUNNABLE 状态。

RUNNABLE 到 BLOCKED

只有一种场景会触发 RUNNABLE 到 BLOCKED 状态的转变,那就是线程等待 synchronized 隐式锁。当线程获取 synchronized 隐式锁并成功执行后,就会退出 BLOCKED 状态,回到 RUNNABLE 状态。

RUNNABLE 到 TERMINATED

  1. 当线程执行完 run() 方法或执行 run() 过程中抛出异常时,线程都会进入到 TERMINATED 状态。

不过有时候,我们想要主动强制终止 run() 方法的执行,比如 run() 方法访问一个很慢的网络,我们不想等了,想终止它。方法是调用 interrupt()。

interrupt() 和 stop() 的区别

  • stop() 会真的杀死线程,不给线程喘息的机会。如果线程持有 ReentrantLock 锁,被 stop() 的线程并不会自动调用 ReentrantLock 的 unlock() 去释放锁,这就太危险了。
  • interrupt() 仅仅是通知线程,线程有机会执行一些后续操作,并且也可以无视这个通知。

InterruptedException 退出同步代码块

会释放当前线程持有的锁,所以相比外部强制 stop 是安全的。

被 interrupt 的线程是如何收到通知的?

  1. 异常方式

    • 当线程处在 WAITING、TIMED_WAITING 状态时,如果有其它线程调用该线程的 interrupt() 方法,那么会使该线程返回到 RUNNABLE 状态,并触发 InterruptedException 异常。
  2. 主动检测方式

    • 如果线程处于 RUNNABLE 状态,并且没有阻塞在某个 I/O 操作上,例如中断计算圆周率的线程 A,这时就得依赖线程 A 主动检测中断状态了。如果其他线程调用线程 A 的 interrupt() 方法,那么线程 A 可以通过 isInterrupted() 方法,检测是不是自己被中断了。

Read more

LibreChat 集成 Stripe 支付的奶妈级教程

LibreChat 集成 Stripe 支付的奶妈级教程

我们假设你已经熟悉基本的 React 和 Node.js 开发,并且正在使用 LibreChat 的默认技术栈(React 前端、Node.js 后端、Vite 构建工具,可能还有 Electron 桌面应用)。教程会特别考虑 Electron 环境下的适配问题(例如 macOS 中文路径或路由错误)。“奶妈级”带你从零开始实现支付功能(包括一次性支付和添加高级会员订阅) 教程目标 * 在 LibreChat 中添加支付页面,支持用户通过信用卡付款。 * 实现 Stripe 的一次性支付功能。 * (可选)扩展到订阅功能,管理高级会员状态。 * 解决 Electron 环境下的常见问题(如路由和路径解析)。 * 生成可公开推送的 Markdown 教程,方便社区参考。 前提条件 在开始之前,请确保你已准备好以下内容:

By Ne0inhk
超棒的雅思资源!

超棒的雅思资源!

雅思真题材料地址: https://github.com/zeeklog/IETLS 感谢所有人。材料来自:@shah0150 & @kbtxwer * 超棒的雅思资源 * 雅思简介 * 听力 * 阅读 * 写作 * 口语 * 词汇 * 其他 * YouTube 频道 * [播客] (#podcasts) 雅思简介 * 什么是雅思 - 了解什么是雅思 听力 * 高级听力 * 雅思官方网站 * 考试英语 * 英国广播公司节目 * 乔治梅森大学口音学习网站 - 学习不同的口音 * 英国广播公司播客 * 英国文化协会听力练习 阅读 * 雅思提升阅读 写作 * 雅思提升写作 * 雅思从 6 分到 9 分 * 迷你雅思 口语 * Verbling 提供在线英语家教服务

By Ne0inhk