
Java并发
文章平均质量分 90
丁真的小马
这个作者很懒,什么都没留下…
展开
-
Java:AQS原理
一、AQS概述 AQS是AbstractQueuedSynchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架。 特点: 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁 getState - 获取 state 状态 setState - 设置 state 状态 compareAndSetState - cas 机制设置 state 状态 独占模式是只有一个线程能够访问资源,而共.原创 2021-12-27 00:18:04 · 553 阅读 · 0 评论 -
Java中的wait/notify、join/yield、park/unpark原理
一、wait和notify(Synchronized) Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片 BLOCKED 线程会在 Owner 线程释放锁时唤醒 WAITING 线程会在 Owner 线程调用 notify 或 notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入 EntryList 重新竞争 sleep(long n)和原创 2021-12-26 23:27:33 · 700 阅读 · 0 评论 -
Java内存模型与线程
1、内存模型 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象。 不同架构的物理机器可以拥有不一样的内存模型,而Java虚拟机也有自己的内存模型,并且与这里介绍的内存访问操作及硬件的缓存访问操作具有高度的可类比性。 缓存一致性协议有MSI、MESI、MOSI、Synapse、Firefly、Dragon Protocal等。 除了增加高速缓存之外,为了使处理器内部的运算单元能被充分利用,处理器可能会对输出的代码进行乱序执行优化,处理器会在计算之后将乱序执行的结原创 2021-11-04 20:05:44 · 207 阅读 · 0 评论 -
Java中Synchronized的用法及原理
为了避免临界区的竞态条件发生(多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测),有多种手段可以达到目的: 阻塞式的解决方案:synchronized,Lock 非阻塞式的解决方案:CAS 一、基本用法 关键字synchronized的作用是实现线程间的同步。它的工作是对同步代码加锁,使得每一次只能有一个线程进入同步代码块,从而保证线程间的安全性。另外,不要错误理解为锁住了对象就能一直执行下去,时间片用完就会停止执行下去。 关键字synchronized的用法: 指定加锁原创 2021-10-05 16:18:18 · 3116 阅读 · 0 评论 -
Java之线程的状态转换
一、操作系统层面的五种状态: 初始状态:仅是在语言层面创建了线程对象,还未与操作系统线程关联。 可运行状态:指该线程已经被创建(与操作系统线程关联),可以由CPU调度执行 运行状态:指获取了CPU时间片运行中的状态 当CPU时间片用完,会从运行状态转至可运行状态,回导致线程上下文切换 阻塞状态: 如果调用了阻塞API,如果BIO读写文件,这时该线程实际不会用到CPU,会导致线程上下文切换,进入阻塞状态 等BIO操作完毕,会由操作系原创 2021-10-05 14:09:40 · 452 阅读 · 0 评论