synchronized关键字:
类锁,对象锁,同步代码块
https://blog.csdn.net/cs408/article/details/48930803#commentBox
synchronized monitorEneter,可重入;对象头
https://blog.csdn.net/u011277123/article/details/85061655
https://juejin.im/post/5ae6dc04f265da0ba351d3ff#heading-4
搞懂并发编程,轻松应对80%的面试场景
https://www.toutiao.com/i6631353575584825870/?group_id=6631353575584825870
死锁
解决死锁的手段
保证多个线程按照相同的顺序获取锁
设置获取锁的超时时间,超过设定时间以后自动释放
死锁检测
资源限制
「阿里面试系列」Java线程的应用及挑战
原子性,有序性,可见性 https://www.jianshu.com/p/cf57726e77f2
面试官最爱的volatile关键字:https://juejin.im/post/5a2b53b7f265da432a7b821c
主要是禁止重排序,初始化一个实例(SomeType st = new SomeType())在java字节码中会有4个步骤,申请内存空间,初始化默认值(区别于构造器方法的初始化),执行构造器方法连接引用和实例。这4个步骤后两个有可能会重排序,1234 1243都有可能,造成未初始化完全的对象发布。volatile可以禁止指令重排序,从而避免这个问题
作者:陈鹏
链接:https://www.zhihu.com/question/56606703/answer/149894860
Java 并发:Lock 框架详解
https://blog.csdn.net/justloveyou_/article/details/54972105#commentBox
不可不说的Java“锁”事
https://tech.meituan.com/2018/11/15/java-lock.html
vector:
Vector和ArrayList的最大不同是Vector是线程安全的而ArrayList不是。
Vector几乎所有的方法都使用synchronized关键字是来保证线程安全使它的性能比不上ArrayList。
Vector和ArrayList不同还体现在动态增长的策略上。ArrayList的基本增长策略是oldCapacity1.5+1,如果还不够则容量为实际需要容量;Vector的基本增长策略是oldCapacity+设定好的增长幅度,如果没设定则新容量增长为oldCapacity2,如果还不够则为实际需要的容量。
collections:
https://blog.csdn.net/u011240877/article/details/52773577#commentBox
ConcurrentHashMap源码分析(JDK8版本)
https://blog.csdn.net/u010723709/article/details/48007881#commentBox
hashmap源码分析:
Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读
https://blog.csdn.net/u011240877/article/details/53351188#commentBox
hashmap线程不安全:
https://www.jianshu.com/p/e2f75c8cce01