
并发
金大大jhz
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发相关知识总结(一)
前言这几天看了几章《java并发编程的艺术》,及时总结,别忘的太快。知识点1、如何减少上下文切换无锁并发编程:通过无锁设计来避免锁的使用,比如让不同的线程处理不同段的数据。 CAS:CAS即Compare And Set,通过CAS算法来更新数据,保证数据更新的安全性。 使用最小线程:在使用线程池时,尽量做到大池小队列(IO密集型)以及小池无队列(CPU密集型),后者使用小池可...原创 2018-11-07 22:41:56 · 203 阅读 · 0 评论 -
跟着源码学ConcurrentHashMap
前言 多线程环境下,使用Hashmap进行get操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap(这在前面学习hashmap的文章中已经介绍过)。ConcurrentHashMap作为JUC包中最重要最常用的线程安全容器,在并发编程中的使用频率非常高,本文就跟着源码来分析下ConcurrentHashMap的实现原理。1、核心类图 ...原创 2019-01-07 22:33:27 · 160 阅读 · 0 评论 -
面试题:ConcurrentHashMap 1.7和1.8的区别
前言面试官问到这个我觉得送分了,觉得自己答的挺好,面完看看其实发现还是有一些没答全,写个帖子记录下。ConcurrentHashMap 1.7和1.8的区别1、整体结构1.7:Segment + HashEntry + Unsafe1.8: 移除Segment,使锁的粒度更小,Synchronized + CAS + Node + Unsafe2、put()1.7:先定...原创 2019-03-20 22:06:17 · 35168 阅读 · 25 评论 -
并发相关知识总结(三)
知识点(第五、六、七章)1、Lock接口关键点:(1)lock和synchronized的区别,后者是通过monitor+对象头的方式控制线程的同步,锁的获取和释放都是隐式完成的,而lock则是手把手的获取与释放锁;(2)lock可以尝试非阻塞的获取锁,以及超时获取锁,并且,与synchronized不同,获取到锁的线程能够响应中断,同时释放锁。2、AQS这个是重中之重!!这个部分...原创 2019-03-29 23:13:02 · 168 阅读 · 0 评论 -
并发相关知识总结(二)
前言二和一之间拖了太久,相信看过这本书的都知道,后半章要真的学透要花很长的时间,看很多的源码,其实后半本我看完也只花了一个月不到,但是看完之后仔细回想一下,发现收货真的不大,于是狠狠的啃了很多源码,包括上班时在项目中使用时,都会特意的去瞧一瞧源码,现在虽不能说吃透,但是我觉得还是有收获把,就一边总结,一边再复习一次。知识点(第四章)1、线程线程定义和什么进程的区别啥的就不总结了,线...原创 2019-03-28 23:02:12 · 148 阅读 · 0 评论 -
并发相关知识总结(四)
知识点(第八、九章)1、CountDownLatch基本的用法就是定义计数器N,并通过await方法阻塞线程,直到N变成0。和join最直观的使用区别就是不用手动的去挂起了,一两个线程可能并不会显得多方便,但是当线程数量较大时,区别还是很明显的。2、CyclicBarrier这个我也没用过,其字面意思就是可循环使用的屏障,让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到...原创 2019-04-16 23:41:37 · 292 阅读 · 0 评论 -
Redis面试题记录--缓存双写情况下导致数据不一致问题
前言这个去年就看到过项目中的实现方案,结果今天问还是忘了,记录下。1、问题描述在高并发的情况下,如果当删除完缓存的时候,这时去更新数据库,但还没有更新完,另外一个请求来查询数据,发现缓存里没有,就去数据库里查,还是以上面商品库存为例,如果数据库中产品的库存是100,那么查询到的库存是100,然后插入缓存,插入完缓存后,原来那个更新数据库的线程把数据库更新为了99,导致数据库与缓存不一致...原创 2019-06-11 23:06:20 · 1190 阅读 · 0 评论