![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 78
沈小洋
这个作者很懒,什么都没留下…
展开
-
Java 之 volatile 关键字
作用volatile 能够保证可见性、有序性,不保证复合操作的原子性。在单线程中,为了提高程序执行效率,编译器和处理器可能对指令进行重排序。单线程环境下,这种优化是没有问题的,但是多线程环境下,如果两个线程之间存在数据依赖,就可能导致程序出错,volatile 可以用来协调不同线程间的变量共享。volatile 的写-读具有和锁的释放-获取相同的内存语义,所以我们有时候也会说 volatile 是轻量级的 synchronized 。具体来说,当写一个 volatile 变量时,JMM 会把该线程对原创 2021-03-15 17:57:49 · 113 阅读 · 1 评论 -
Java 之 final 关键字
目录作用1、构造不可变对象2、确保对象正确初始化实现原理重排序规则底层实现1、写 final 域的实现2、读 final 域的实现对象逸出问题JSR-133为什么要增强 final 的内存语义?作用1、构造不可变对象用于构造不可变对象, final 类型的域是不能修改的。但是如果 final 引用的对象是可变的,那么这些被引用的对象是可以修改的。2、确保对象正确初始化确保线程读取包含 final 域的对象时看到的一定是初始化完成后的 final 域。如果能够通过引用读取到对象,且对象不为空,那么一原创 2021-03-15 17:11:55 · 339 阅读 · 1 评论 -
Java系列文章目录
Java并发finalvolatilesynchronizedReentrantLockReentrantReadWriteLockCountDownLatchSemaphoreCyclicBarrier集合HashMapLinkedHashMapConcurrentHashMapIO零拷贝JVM类加载机制垃圾收集算法垃圾收集器SpringBean的生命周期AOP的底层实现,不同实现方式的区别?为什么说反射存在性能问题?Spring事务与事务传播机制循环依赖原创 2021-03-15 16:34:35 · 128 阅读 · 0 评论 -
关于synchronized批量重偏向和批量撤销的一个小实验
前段时间学习synchronized的时候做过一个关于批量重偏向和批量撤销的小实验,感觉挺有意思的,所以想分享一下。虽然是比较底层的东西,但是结论可以通过做实验看出来,就挺有意思。我们都知道synchronized分为偏向锁、轻量级锁和重量级锁这三种,这个实验主要是和偏向锁相关的。关于偏向锁,我们又知道,偏向锁在偏向了某一个线程之后,不会主动释放锁,只有出现竞争了才会执行偏向锁撤销。先说结论吧,开启偏向锁时,在「规定的时间」内,如果偏向锁撤销的次数达到20次,就会执行批量重偏向,如果撤销..原创 2020-11-20 17:22:59 · 474 阅读 · 2 评论 -
关于HashMap的一个有趣的小问题
最近被问到了一个很有意思的问题,是关于HashMap的。之前没看到过类似的问题,感觉很有趣,所以想记录一下。问题很简单,基于一个很简单的常识,即重写equals方法必须同时重写hashCode方法。问题的内容是,假如只重写了equals方法,或者只重写了hashCode方法,分别会出现什么情况?因为比较细节,所以通过源码来分析一下。可以考虑这两个场景,①put之后用等价的key再次put,②put之后用等价的key尝试get。首先看只重写equals方法的情况。场景①会发生什么情况?场景②会发生什么情况原创 2020-11-15 00:19:10 · 77 阅读 · 0 评论