![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程与高并发编程
并发编程:包括多线程、CAS、AQS、锁、并发工具等
FlowYJ
使劲学习,知道的越多,不知道的就越多。
展开
-
并发编程-volatile关键字的底层实现原理
1.volatile的内存语义1.1 volatile的特性一个volatile变量自身具有以下三个特性:可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。而普通变量是不能做到这一点的,普通变量的值在线程间传递需要通过主内存来完成。有序性:volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。受限原子性:这里volatile变量的原子性与synchronized的原子性是不同的转载 2020-09-22 14:22:46 · 272 阅读 · 0 评论 -
并发编程实战-读写锁ReentrantReadWriteLock使用
模拟一个简单的缓存管理public static void main(String[] args) { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); Map<String, Object> map = new HashMap<>(); // 读锁,共享锁 ReentrantReadWriteLock.ReadLock readLock = lock.readLock();原创 2020-09-18 17:12:31 · 124 阅读 · 0 评论 -
并发编程实战:CountDownLatch和CyclicBarrier的使用(实战应用)
模拟一群朋友相约聚餐,大家都到了就开始吃饭,大家都吃完饭了就去结账,并且约定谁最后到达饭店,谁就买单。代码如下:package com.jinke.deliver.pool;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;import java.util.List;import java.util.Random;import java.util.concurrent.Bro原创 2020-07-08 11:09:34 · 321 阅读 · 0 评论 -
多线程与高并发学习总结(一)
偏向锁:记录第一次进来线程的id,当下一次有线程进来的时候,就比较线程id是否是之前的那个线程,如果是,就跳过加锁的过程,不是则进行锁升级,进入自旋锁自旋锁:拿锁的时候一直自旋等待,一直转圈,直到其他线程释放锁,然后拿到锁。如果一直拿不到,那么久升级为重量级锁(synchronize)【适合线程数少,执行时间短的那种】,消耗CPU重量级锁:线程多,执行时间长的。volatile关键字1)保证变量的可见性:某个线程对变量值的改变对于其他线程来说是不能马上可见的,需要靠CPU的缓存原创 2020-09-16 16:25:46 · 210 阅读 · 0 评论