![](https://img-blog.csdnimg.cn/a71d882c0ace4addb4d2a5debc5a466f.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程专栏
文章平均质量分 97
并发编程
秋天的一亩三分地
学无止境
展开
-
关于深入理解AQS之独占锁ReentrantLock
java.util.concurrent 包中的大多数同步器实现都是围绕着共同的基础行为,如等待队列、条件队列、独占获取、共享获取等,而这些行为的抽象就是基于 **AbstractQueuedSynchronizer(简称AQS)**实现的,AQS 是一个抽象同步框架,可用来实现一个依赖状态的同步器。管程:一般使用 MESA,其中有两个队列:①同步等待队列(即上图的入口等待队列,获取锁有关,获取锁失败的线程会加入此队列),②条件等待队列(阻塞唤醒机制)原创 2022-11-20 01:12:44 · 404 阅读 · 0 评论 -
关于深入理解并发锁机制之synchronized
从偏向锁的加锁解锁过程中可看出,当只有一个线程反复进入同步块时,偏向锁带来的性能开销基本可以忽略,但当有其他线程尝试获得锁时,就需要等到 safe point(即)时,再将偏向锁撤销为无锁状态或升级为轻量级,会消耗一定的性能,所以在多线程竞争频繁的情况下,偏向锁不仅不能提高性能,反而降低性能。因此才有了批量重偏向与批量撤销的机制。批量重偏向和批量撤销是针对类的优化,和对象无关。偏向锁重偏向一次之后不可再次重偏向。原创 2022-11-14 17:55:17 · 144 阅读 · 0 评论 -
关于CAS与Atomic原子操作
CAS(Compare And Swap,比较并交换),通常指的是这样一种原子操作:针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。CAS 可以看作是它们合并后的整体——一个不可分割的原子操作,并且其原子性是直接在硬件层面得到保障的。CAS可以看做是乐观锁(对比数据库的悲观、乐观锁)的一种实现方式,Java原子类中的递增操作就通过CAS自旋实现的。CAS是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。在并发编程中很容易出现并发安全的问题,举个很原创 2022-11-10 23:12:38 · 689 阅读 · 0 评论 -
关于深入理解Java线程
程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的 。当一个程序被运行,从磁盘加载此程序的代码到内存时,就开启了一个进程。进程可视为程序的一个实例。大部分程序可同时运行多个实例进程(如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(如网易云音乐、360 安全卫士等)。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。线程是进程中原创 2022-11-07 13:07:04 · 1341 阅读 · 0 评论 -
关于深入理解JMM与并发三大特征
Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以此来实现Java程序在各种平台下都能达到一致的并发效果。JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何及何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步地访问共享变量。JMM描述的是一种抽象的概念,一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性、有序性、可见性展开的。原创 2022-10-31 23:13:28 · 617 阅读 · 0 评论