java 并发 面经
面经
sychronized基于什么实现或者说基于什么命令实现
锁的升级1
JDK1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在JDK1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态(依次升级),它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率.
并发学习
- 学习目标
- 看懂并发程序
- 学习资料
- 视频
- 一看并发编程的书我就困得不行,我找找有没有视频课吧,要命。
- 中文的只在慕课上看到. https://www.imooc.com/article/24007?block_id=tuijian_wz
- 视频
- 术语
- 独占式
- 共享式
- CAS
- JUC
- java中轻量级锁也是基于cas实现的
- 轻量级锁一般情况下是优于重量级锁(互斥锁)的
-
很多时候Java面试并发部分只考察概念,尤其是面C++的时候。
文章
牛科网 2018 java线程
- https://www.cnblogs.com/XHJT的博客
- java笔记--关于线程同步(7种同步方式)
- 多说一句,volatile生产环境别用,绝对是坑,可以修饰布尔类型的成员变量,或者是用在双重检查锁的单例模式这两种场景可以保证线程安全,这个关键字早晚被废弃,国外大神们吐槽很多次了。
- volatile 是不能达到同步效果的~
- java笔记--对信号量Semaphore的理解与运用
- Callable<V>接口实现有返回值的线程,Runnable不会返回结果,并且无法抛出异常。
- sync的核心是AQS,AQS的核心是state和双端队列。
- java笔记--关于线程同步(7种同步方式)
- JAVA 中的 CAS. https://segmentfault.com/a/1190000013127775
- 乐观锁的实现原理是CAS。
- 当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。
- 悲观锁最大的问题就是阻塞问题
- 悲观锁利用排他锁实现,不允许其他人并发修改。
- CAS的应用:自旋锁。
- 所谓自旋锁,我觉得这个名字相当的形象,在lock()的时候,一直while(true)循环,直到while(true)中的 cas 操作成功为止。
- 在高并发锁竞争比较激烈的情况下轻量级锁会由于长时间自旋消耗cpu从而使得轻量级锁的性能比传统的重量级锁更慢。
- CAS的ABA问题和解决
- Java 并发编程. https://segmentfault.com/a/1190000014226007
- volatile
- 原子操作的实现
- RocksDB上锁机制. https://www.cnblogs.com/cchust/p/7107392.html
- Java并发编程的艺术·读书笔记.note
- 微信. Java 编程之美:并发编程高级篇之一
- ThreadLocal
- InheritableThreadLocal
- JDK 并发包中 ThreadLocalRandom
- *微信. Java 并发编程之美:并发编程高级篇之二
- rt.jar 中 Unsafe 类
- rt.jar 中 LockSupport 类
- JDK8 新增原子操作类 LongAdder
- JUC 并发包中并发组件 CopyOnWriteArrayList
- 微信. Java 编程之美:并发编程高级篇之三
- AQS
- ReentrantLock
- ReentrantLockReadWriteLock
- StampedLock
- 并发之Fork/Join框架使用及注意点. http://www.imooc.com/article/24822
- 一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。使用工作窃取(work-stealing)算法,主要用于实现“分而治之”。