CAS,Compare And Swap,即比较并交换。
Doug lea大神在同步组件中大量使用CAS技术鬼斧神工地实现了Java多线程的并发操作。
整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至...
转载
2021-07-30 15:19:25
158阅读
CAS,Compare And Swap,即比较并交换。Doug lea大神在同步组件中大量使用CAS技术鬼斧神工地实现了Java多线程的并发操作。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8的版本中也调整为了CAS+Synchronized。可以说CAS是整个JUC的基石。
1、CAS分析
在C
转载
2021-06-22 15:04:55
126阅读
信号量Semaphore是一个控制访问多个共享资源的计数器,和CountDownLatch一样,其本质上是一个“共享锁”。 Semaphore,在API是这么介绍的:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。
转载
2023-08-23 15:43:04
48阅读
死磕Java
Java作为一门广泛应用的编程语言,被广泛应用于各种领域,包括后端开发、移动应用开发等。但是,对于一些初学者来说,Java可能不是那么容易掌握。本文将通过介绍Java的基本概念和示例代码,帮助读者更好地理解和掌握这门语言。
### Java的基本概念
#### 类和对象
在Java中,一切皆为对象。一个类是对象的模板,包含了对象的属性和方法。对象是类的实例化,通过关键字`ne
原创
2024-05-09 04:26:04
46阅读
ThreadLoacal是什么?
ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢?
API是这样介绍它的:This class provides th
转载
2021-06-22 15:10:54
244阅读
1评论
Java 多线程进阶-并发数据结构 Java 多线程进阶-并发数据结构并发数据结构
常用的数据结构是线程不安全的
ArrayList/HashMap/HashSet 非同步的多个线程同时独写, 可能会抛出异常或数据错误传统Vector/HashTable等同步数据集合性能过差并发数据结构: 数据添加或删除
阻塞式集合: 当集合为空或者满时, 等待非阻塞式集合: 当集合为空或者满时,
转载
2023-07-14 01:03:33
55阅读
经过四篇博客阐述,我相信各位对Java内存模型有了最基本认识了,下面LZ就做一个比较简单的总结。
转载
2021-07-30 11:34:05
159阅读
经过四篇博客阐述,我相信各位对Java内存模型有了最基本认识了,下面LZ就做一个比较简单的总结。
1、总结
JMM规定了线程的工作内存和主内存的交互关系,以及线程之间的可见性和程序的执行顺序。
一方面,要为程序员提供足够强的内存可见性保证;
另一方面,对编译器和处理器的限制要尽可能地放松。
JMM对程序员屏蔽了CPU以及OS内存的使用问题,能够使程序在不同的CPU和OS内存
转载
2021-06-22 15:09:20
114阅读
java8中为什么要新增LongAdder?
LongAdder的实现方式?
LongAdder与AtomicLong的对比?问题(1)java8中为什么要新增LongAdder?(2)LongAdder的实现方式?(3)LongAdder与AtomicLong的对比?简介LongAdder是java8中新增的原子类,在多线程环境中,它比AtomicLong性能要高出不少,特别是写多的场景。它是怎
原创
2021-04-27 15:31:16
294阅读
什么是原子操作?
原子操作和数据库的ACID有啥关系?
AtomicInteger是怎么实现原子操作的?
AtomicInteger是有什么缺点?问题(1)什么是原子操作?(2)原子操作和数据库的ACID有啥关系?(3)AtomicInteger是怎么实现原子操作的?(4)AtomicInteger是有什么缺点?简介AtomicInteger是java并发包下面提供的原子类,主要操作的是int类型
原创
2021-04-27 15:31:32
161阅读
java8中为什么要新增LongAdder?
LongAdder的实现方式?
LongAdder与AtomicLong的对比?
原创
2019-05-13 00:05:20
440阅读
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:...
转载
2021-07-30 11:42:08
191阅读
本文 LZ 就通过 happens-before 原则和 volatile 的内存语义两个方向介绍 volatile 。
转载
2021-07-30 11:33:21
138阅读
近期活动:加班的你,需要一束光本文转载自公众号: Java技术驿站前篇文章《死磕Java并发:深入分析volatile的实现原理》中已经阐述了volatile的特性了:v...
转载
2021-06-22 15:09:41
105阅读
SpringSession (死磕) 场景和问题当Zuul网关接收到http请求后,当请求进入对应的Filter进行过滤,通过 SpringSecurity 认证后,提取 SessionID,转发给各个微服务,通过Spring-Session创建的分布式微服务,实现Session共享!特点:(1)浏览器和移动端,和Nginx代理,对token可见。(2)各个微服务,用到共享Session。 并且,
到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。
转载
2021-07-30 13:40:10
161阅读
要实现一个线程安全的队列有两种方式:阻塞和非阻塞。阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用。下面我们就开始一个非阻塞算法的研究:CoucurrentLinkedQueue。
转载
2021-07-30 13:42:53
114阅读
要实现一个线程安全的队列有两种方式:阻塞和非阻塞。阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用。下面我们就开始一个非阻塞算法的研究:CoucurrentLinkedQueue。
ConcurrentLinkedQueue是一个基于链接节点的无边界的线程安全队列,它采用FIFO原则对元素进行排序。采用“wait-free”算法(即CAS算法)来实现的。
Coucurre
转载
2021-06-22 15:02:51
157阅读
【死磕 Java 并发】—– J.U.C 之 Java并发容器:ConcurrentHashMap
转载
2021-07-30 11:47:01
134阅读
获取一个Condition必须要通过Lock的newCondition()方法。
该方法定义在接口Lock下面,返回的结果是绑定到此 Lock 实例的新 Condition 实例。
Condition为一个接口,其下仅有一个实现类...
转载
2021-07-30 13:53:48
89阅读