线程的生命周期

来源:互联网 发布:linux obj 编辑:程序博客网 时间:2024/06/06 16:54

线程生命周期介绍

线 程 具 有 生 命 周 期 , 其 中 包 含 出 生 状 态 、 就 绪 状 态 、 运 行 状 态 、 等 待 状 态 、 休 眠 状 态 、 阻 塞 状 态 和 死 亡 状 态 7 种 状 态 。


出 生 状 态 就 是 用 户 在 创 建 线 程 时 处 于 的 状 态 , 在 用 户 使 用 该 线 程 实 例 调 用 start()方 法 之 前 线 程 都 处 于 出 生 状 态 ;


一 旦 线 程 进 入 可 执 行 状 态 , 它 会 在 就 绪 与 运 行 状 态 下 辗 转 , 同 时 也 有 可 能 进 入 等 待 、 休 眠 、 阻 塞 或 死 亡 状 态 。


当 处 于 运 行 状 态 下 的 线 程 调 用 Thread 类 中 的 wait() 方 法 时 , 该 线 程 处 于 等 待 状 态 , 进 入 等 待 状 态 的 线 程 必 须 调 用 Thread 类 中 的notify()方 法 才 能 被 唤 醒 , 而 notifyAll() 方 法 是 将 所 有 处 于 等 待 状 态 下 的 线 程 唤 醒 ;


当 线 程 调 用 Thread 类 中 的 sleep() 方 法 时 , 则 会 进 入 休 眠 状 态


如 果 一 个 线 程 在 运 行 状 态 下 发 出 输 入 / 输 出 请 求 , 该 线 程 将 进 入 阻 塞 状 态


, 在 其 等 待 输 入 / 输 出 结 束 时 线 程 进 入 就 绪 状 态


对 于 阻 塞 的 线 程 来 说 , 即 使 系 统 资 源 空 闲 , 线 程 依 然 不 能 回 到 运 行 状 态 : 当 线 程 的 run() 方 法 执 行 完 毕 时 ,线 程 进 入 死 亡 状 态


描 述 了 线 程 生 命 周 期 中 的 各 种 状 态 的图。

这里写图片描述

虽 然 多 线 程 看 起 来 像 同 时 执 行 , 但 事 实 上 在 同 一 时 间 点 上 只 有 一 个 线 程 被 执 行 , 只 是 线 程 之 间 切 换 较 快 , 所 以 才 会 使 人 产 生 线 程 是 同 时 进 行 的 假 象 。在 Windows 操 作 系 统 中 , 系 统 会 为 每 个 线 程 分 配 一 小 段 CPU 时 间 片 , 一 旦 CPU 时 间 片 结 束 就 会 将 当 前 线 程 换 为 下 一 个 线 程 , 即 使 在 该 线 程 没 有 结 束 的 情 况 下 。


总 结 出 使 线 程 处 于 就 绪 状 态 有 以 下 几 种 可 能 。

〖 调用sleep()方法
〖 调 用 wait() 方 法 。
〖 等 待 输 入 / 输 出 完 成 。

当 线 程 处 于 就 绪 状 态 后 , 可 以 通 过 以 下 几 种 方 式 使 线 程 再 次 进 入 运 行 状 态 。
〖 线 程 调 用 notify() 方 法 ·
〖 线 程 调 用 notifyAll() 方 法 。
〖 线 程 调 用 interrupt()方 法 。
〖 线 程 的 休 眠 时 间 结 束 。
〖 输 入 / 输 出 结 束 。