摘要: 活跃性: 线程代码无法执行完成. 分为3种情况:死锁、活锁、饥饿 死锁 一个线程需要同时获取多把锁,这时就容易发生死锁 死锁案例和查看方法:https://www.cnblogs.com/mpyidudu/p/15628517.html 活锁 活锁出现在两个线程互相改变对方的结束条件,最后谁也无法结 阅读全文
posted @ 2021-12-26 19:00 狻猊的主人 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 基本使用 它们是 LockSupport 类中的方法, 可以先unpark 再park // 暂停当前线程 LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象) 与 Object 的 wait & notify 相比 wait,not 阅读全文
posted @ 2021-12-26 18:45 狻猊的主人 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 定义 与前面的保护性暂停中的 GuardObject 不同,不需要产生结果和消费结果的线程一一对应 消费队列可以用来平衡生产和消费的线程资源 生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据 消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据 JDK 中各种阻塞队 阅读全文
posted @ 2021-12-26 17:23 狻猊的主人 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 定义 即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者) JDK 中,join 的实现、Future 阅读全文
posted @ 2021-12-26 16:56 狻猊的主人 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 原理 Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片 BLOCKED 线程会在 Owner 线程释放锁时唤醒 WAITING 线程会在 Owner 线程调用 阅读全文
posted @ 2021-12-26 03:41 狻猊的主人 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Java 对象头 普通对象:占8个字节 数组对象:占12个字节 Mark Word结构 32位虚拟机下:MarkWord有4个字节 最后2个bit位表示状态 64位虚拟机下:MarkWord有8个字节 最后2个bit位表示状态 状态 说明 01 无锁 00 轻量级锁 10 重量级锁 11 标记为GC 阅读全文
posted @ 2021-12-26 03:13 狻猊的主人 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 在不同层面上解读线程状态就可以得到不同的结果 操作系统层面:五种状态 Java API层面: 六种状态 五种状态 【初始状态】 仅是在语言层面创建了线程对象,还未与操作系统线程关联 【可运行状态】 (就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行 【运行状态】 指获取了 阅读全文
posted @ 2021-12-26 00:53 狻猊的主人 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 进程和线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的 阅读全文
posted @ 2021-12-26 00:29 狻猊的主人 阅读(57) 评论(0) 推荐(0) 编辑