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