java
文章平均质量分 63
21世纪手艺人
Stop talk!Show me your code!!!!!
展开
-
常见限流算法 与 Guava RateLimiter实现
常见限流算法以及Guava RateLimiter源码分析原创 2022-07-23 23:29:29 · 1389 阅读 · 2 评论 -
如何优雅的在Spring Boot中使用Quartz
在网上看到关于Spring Boot整合Quartz的方式都看起来不是太好用,太复杂。一般都会定义一个实现了QuartzJobBean 的任务类(这个类不会交给Spring管理)。然后给这个Job配置相应的JobDetail和Trigger。具体操作如下:1:定义一个任务public class DateTimeJob extends QuartzJobBean { @Override protected void executeInternal(JobExecuti原创 2020-07-01 17:31:14 · 500 阅读 · 0 评论 -
StampedLock 源码解读(jdk1.8)
目录介绍重入性:不可重入调度策略改造后的CLH结构字段介绍写读乐观读锁转换释放锁StampedLock是jdk1.8中新加入的一个锁。先看看它的介绍有一个大体的认识。介绍A capability-based lock with three modes for controlling read/write access. Th...原创 2019-11-26 20:25:09 · 261 阅读 · 0 评论 -
关于java float类型的比较
关于java的浮点类型处理,一般处理计算会想到使用BigDecemal,但是如果是比较呢?可能会直接使用==,>等符号直接进行比较运算。可以执行下面的代码查看结果:public static void main(String[] args) { computer(2.00023434239f, 2.00023434233f); System.out...原创 2019-11-19 20:55:10 · 996 阅读 · 0 评论 -
二维数组按行读取和按列读取的效率问题
public static void main(String[] args) { int x = 5000;int y = 5000; int[][] array = new int[x][y]; long startTime = System.nanoTime(); for (int i = 0; i < x; i++) {...原创 2019-11-15 17:14:25 · 2800 阅读 · 0 评论 -
jdk1.8 ReentrantLock源码解析
本文主要讲了重入锁的文档说明,和核心代码的理解。在阅读之前需理解了AQS源码。后面的公平锁和非公平锁的实现都是基础此基础的。/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * *//* * * Written by Doug Lea with assistance from membe...原创 2019-09-20 20:15:20 · 158 阅读 · 0 评论 -
jdk1.8 LockSupport源码解析
/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * *//* * * * * * * Written by Doug Lea with assistance from ...原创 2019-09-20 20:14:06 · 229 阅读 · 0 评论 -
jdk1.8 AbstractQueuedSynchronizer源码解析
/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * *//* * * * * * * Written by Doug Lea with assistance from ...原创 2019-09-20 20:12:45 · 232 阅读 · 0 评论 -
32位jdk volatile修饰long和double类型
32位jdk中long和double有什么问题?long和double是64位的,在32位的jdk中完成write操作是需要两次操作的(每次执行32位)。也就是long和double的write操作是非原子性的。非原子的操作在多线程环境下会有线程安全问题。比如A,B两个线程同时的去修改long类型x的值,可能x的高32位是A设置的,低32位是B设置的,导致结果不是程序想要的。为什么vola...原创 2019-07-29 19:20:28 · 1327 阅读 · 0 评论 -
关于修改java代码后得重启Tomcat等服务器的问题
在开发的过程中修改了java代码每次重启Tomcat服务器才行,大多数人就是觉得修改了java代码后Tomcat加载的class文件没有修改得重新部署一遍。其实这个没有说到问题的点子上去。先说下我们写java的时候每次写完之后都是得保存然后运行,如果修改了java代码也是保存后重新运行才有效。其实这个过程是重启了JVM,如果不重启JVM,JVM中加载的类的状态还是没有修改之前的。造成这个问题的原创 2017-09-21 06:54:51 · 1575 阅读 · 0 评论 -
java序列化
要序列化的对象要实现Serializable接口,并且对象中的成员变量也需要实现这个接口。原创 2017-12-02 15:28:39 · 143 阅读 · 0 评论 -
ArrayList源码解读
/* * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * *...原创 2019-04-25 20:18:33 · 155 阅读 · 0 评论 -
java死锁的三个例子
例子1: 锁顺序引发的死锁private final Object left = new Object(); private final Object right = new Object(); public void leftRigth(){ synchronized (left){ synchronized (right)...原创 2019-04-25 14:11:53 · 832 阅读 · 0 评论 -
ArrayList的copy()方法
public class Info { public static void main(String[] args) { ArrayList<A> list = new ArrayList<>(); list.add(new A(1)); ArrayList<A> copy = (ArrayList&...原创 2019-04-25 16:34:04 · 2436 阅读 · 0 评论 -
CLH锁的原理和实现
public class CLHLockV2 { /** * * 隐式节点类 * 作用:维持一个节点状态的字段。一个线程会对应一个节点 */ private static class CLHNodeV2 { /** * 默认状态为true - 即处于等待状态或者加锁成功(换言之,即此节点处于有效的一种状...原创 2019-06-06 12:35:05 · 255 阅读 · 0 评论 -
HashMap 源码浅析(jdk8 resize()详细说明)
成员变量: /** * The default initial capacity - MUST be a power of two. * 默认的初始值大小,1*2的四次方也就是16. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * Th...原创 2019-07-04 11:09:11 · 251 阅读 · 0 评论 -
使用迭代器删除集合的元素抛出异常
迭代器进行迭代使用的是集合的一个拷贝,他是在另外的线程中进行的,每次进行迭代的时候都会与主线程的集合进行对比,检查是否一致。如果不一致会在调用next()方法的时候抛出异常。如果使用的是集合本身的remove方法进行删除元素的话就会造成两个线程的集合不一致的情况,以致抛出异常。如果要移除集合中的元素需使用迭代器的移除元素的方法。java中的foreach的实现使用的就是迭代器。所以在使用for原创 2017-09-05 18:54:22 · 1388 阅读 · 0 评论