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