JAVA
万事胜意❀
这个作者很懒,什么都没留下…
展开
-
乐观锁悲观锁概念
乐观锁:线程每次在处理共享数据时都不会上锁,在更新时会通过数据的版本号登记制判断其他线程有咩有更新数据。适合读多写少悲观锁:线程每次在处理共享数据时都会上锁,其他线程想处理数据就会一直阻塞直到获得锁。适合写操作比较多的场景...原创 2020-08-25 15:12:54 · 189 阅读 · 0 评论 -
为什么我不喜欢用Long.valueOf()去将String转成long
项目中经常看到有人喜欢用Long.valueOf()去将String转成long,我都忍不住去改Convert.asLong()。原因是如果字符串不管是null还是空串,Long.valueOf()都会抛出异常,导致一些不必要的线上故障( java.lang.NumberFormatException : For input string: “”)。而Convert.asLong()能将null或空串直接转成0,也可以指定默认值。总结我觉得相对来说,用Convert.asLong()能规避风险,减少调原创 2020-05-13 16:48:40 · 3109 阅读 · 2 评论 -
记一次load飙升,频繁FullGC问题解决过程
1.现象load飙升到30+线上sql连接异常tps正常sql查询时间剧增2.解决过程sql连接池不够了,肯定是慢sql导致频繁GC,一般内存使用过多结合堆栈信息,某个对象内存占用特别多某个sql查询数量大,调用量多,全表扫描。3.GC查看top 命令查看资源情况,找到使用率最高的线程sudo -u spring-boot jstat -gcutil 384 2...原创 2020-03-26 16:30:09 · 645 阅读 · 0 评论 -
【踩坑总结】java8中stream的findAny踩坑
java8中stream的findAny踩坑需求:寻找list中符合要求的对象通过findAny去实现A a = bList().stream().filter(b -> "test".equals(b.getName())).findAny().get();结果后面发现这个方法并不是找得到就返回,找不到就不做处理,而是找不到直接抛异常了。于是后面改用了这种方式A a =bLi...原创 2019-07-04 17:18:52 · 39516 阅读 · 6 评论 -
java中的boolean类型占几个字节
根据官方文档的描述:boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type re...原创 2019-05-29 14:49:15 · 534 阅读 · 0 评论 -
CAS
1.CAS做了什么?CAS有三个操作数:内存值V,旧的预期值A,需要修改的新值BCAS涉及两个步骤:1.compare:比较内存值是否与预期值A相等。2.set:如果内存值与预期值A相等,set值为B。虽然这是两步,但是CAS保证了这两步操作的原子性,因此可以将上面两步视为一个原子操作。2.处理器如何实现原子操作?1.使用总线锁保证原子性总线锁就是使用处理器提供的一个LOCK#...原创 2019-05-07 14:36:56 · 94 阅读 · 0 评论 -
源码解读-AtomicInteger
前面AtomicBoolean中对原子更新值已经讲得差不多了,AtomicInteger实现的核心也跟AtomicBoolean几乎是一样的,不过AtomicInteger相比起来多了几个方法,我还是理一遍,AtomicBoolean中有的就不过多解释了。1.AtomicInteger是什么一个可以原子方式更新的{@code int}值。{@code AtomicInteger}用于诸如原...原创 2019-03-28 11:18:43 · 141 阅读 · 0 评论 -
源码解读 -AtomicBoolean
1.AtomicBoolean是什么一个可以原子方式更新的{@code boolean}值。该值可以作为原子更新的标志,但是不能用作java.lang.Boolean的替代。2. AtomicBoolean 内部的属性// 设置为使用Unsafe.compareAndSwapInt进行更新private static final Unsafe unsafe = Unsafe.getU...原创 2019-03-26 18:24:08 · 239 阅读 · 0 评论 -
源码解读-ArrayList
ArrayList都很熟悉了List的接口大小可调整的实现类除了实现List接口之外,此类还提供了一些方法来操作内部用于存储列表的数组的大小。线程不安全实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们可以通过元素的序号快速获取元素对象;这就是快速随机访问。1....原创 2019-02-26 17:32:47 · 136 阅读 · 0 评论 -
源码解读-ArrayBlockingQueue
看源码之前,我喜欢先把那个类的介绍看一下,能了解到这个类的大概的特性。原文我就不贴了,总结几点我从介绍里面了解到的几点,后面再通过源码看看,具体怎么实现。这是GUC(java.util.concurrent)包下的一个线程安全的阻塞队列,底层由数组实现。这是一个基于数组的有界的阻塞队列这个队列遵循先进先出(FIFO)原则在队尾插入,队首获取这是一个经典的队列大小固定的"有界缓冲区",一...原创 2019-02-23 14:41:13 · 250 阅读 · 0 评论 -
坑死我的remove之ConcurrentModificationException
#坑死我的remove之ConcurrentModificationException####先上段代码 List<String> list = new ArrayList<>(); Collections.addAll(list,&qu原创 2018-11-26 10:07:53 · 790 阅读 · 0 评论 -
获取当天零点的毫秒数
获取当天零点的毫秒数1.通过获取当前时间,取整获取long zero = System.currentTimeMillis() / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();//System.currentTimeMillis() / (1000 * 3600 * ...原创 2018-08-13 15:49:19 · 7553 阅读 · 3 评论