![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
大庆~
这个作者很懒,什么都没留下…
展开
-
CountDownLantch、CycliBarrier、semaphore的简单使用
关于这三个工具类,个人的一点理解: CountDownLantch,一般应用于将多线程执行完之后再执行main线程,起到一个将上下文由异步转化为同步的效果; CycliBarrier,是将所有异步线程执行完之后,再由这其中的一个线程执行最后一个任务; semaphore,起一个限流的作用,比如有10个线程同时访问某个资源,可以设置成每两个线程执行完释放锁后再由其他线程抢这两个锁; pub...原创 2020-03-04 11:36:02 · 323 阅读 · 0 评论 -
我所认识的锁-总结
1、公平锁:多个线程之间可以按照线程申请锁的顺序获取锁; 2、非公平锁:多个线程之间获取锁的顺序不一定按照申请锁的顺序获得;Synchronized、ReentrantLock默认是非公平锁,后者可以通过构造参数获取公平锁。 3、可重入锁又叫递归锁:是指在一个同步方法内部调用另外一个同步方法时,获得的锁是同一把锁,避免死锁;举例如下: public class TestLock { ...原创 2020-03-03 22:37:03 · 78 阅读 · 0 评论 -
CAS引起的ABA问题以及解决
用AtomicInteger举例说明: public class TestATomicABA { private static AtomicInteger atomicInteger = new AtomicInteger(0); public static void main(String[] args) { new Thread(() -> { ...原创 2020-03-02 17:19:49 · 164 阅读 · 0 评论 -
浅谈CAS的实现
用volatile可以保证共享变量的可见性,但是不能保证一次操作的原子性,因此在并发编程中,用Synchronized或者Lock或者CAS的方式都可以实现原子性操作;但是前面两种方式都是在同一时间内只允许一个线程通过,保证了原子性,但是并发性会下降;而CAS的实现是基于Unsafe类,基本都是本地方法,可以直接访问操作系统,因此它在保证原子性的同时还可以保证并发性,CAS也有缺...原创 2020-03-02 10:59:05 · 192 阅读 · 0 评论 -
JMM内存模型及Volatile的原子性Demo
关于Java内存模型自己的理解: JVM运行程序的实体是线程,而每个线程在运行时都会为其创建一个独立的内存空间(Java栈,线程私有的),而成员变量是存储在堆空间(线程共享的),JMM规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝到自己的工作空间,然后对变量进行操作,操作完成再将变...原创 2020-03-01 21:05:09 · 82 阅读 · 0 评论