
java
文章平均质量分 69
玩家六
这个作者很懒,什么都没留下…
展开
-
MongoTemplate读写操作与创建索引
1、简单查询数据 Query query = new Query(); Criteria criteria = Criteria.where("userId").is(userId); query.addCriteria(criteria).limit(1); List<DTO> dtoList = mongoTemplate.fin...原创 2020-04-25 16:09:19 · 9513 阅读 · 1 评论 -
Log4j2动态配置日志级别
记录下log4j2动态配置日志级别的代码LoggerContext ctx = (LoggerContext) LogManager.getContext(false); org.apache.logging.log4j.core.config.Configuration config = ctx.getConfiguration(); ...原创 2020-02-18 18:18:03 · 2752 阅读 · 0 评论 -
记录一次log4j2导致的内存泄漏
线上服务突然告警,jvm疯狂触发老年代gc,登录后台查看gc并不能释放老年代空间,之前这个服务一直正常运行了几个月,第一时间下载jvm的dump文件,并对服务重启,防止内存不足影响线上业务。使用MAT分析dump文件,先按照retained Heap排序,发现ThreadLocal 和StringBuilder这两个类占用了大量内存,ThreadLocal也是引用的StringBuilder,...原创 2020-02-18 11:32:08 · 11603 阅读 · 3 评论 -
spring cloud学习使用总结
1、springcloud使用具体方法可以参考博客 https://blog.youkuaiyun.com/forezp/article/details/70148833,注意自己使时,注意区分springcloud的各个版本2、springcloud参数传递参考 https://blog.youkuaiyun.com/u014281502/article/details/728961823、配置文件参...转载 2018-07-18 11:07:25 · 337 阅读 · 0 评论 -
Fork/Join框架简析
最近看多线程方面的知识,无意间看到fork/join框架,蛮有意思的,就研究了下,记录下来以便以后查询 Fork/Join框架是jdk1.7之后concurrent包新增的功能 简单来说,实现了一个任务队列,每个任务可以自己选择拆分当前任务并添加到任务队列中,线程池中空闲的线程会主动执行任务队列中的任务,当然ForkJoinPool类肯定不会如此简单的设计,但大体上的功能就是如此,具体如何设计...原创 2018-07-11 17:52:38 · 248 阅读 · 0 评论 -
redis 消息发布订阅与消息队列
redis可以实现消息的发布订阅,可以用作java中的订阅发布模式纯粹redis的发布订阅 redis客户端1中使用命令 SUBSCRIBE talk 可以订阅通道 talk上的消息 redis客户端2中也同样运行这个命令一起订阅通道 talk redis客户端3使用命令 PUBLISH talk 'test' 可以发现客户端1和2同时受到消息java实现 可以通过spring-re原创 2017-10-11 11:30:04 · 21941 阅读 · 4 评论 -
SimpleDateFormat 线程安全的解决方案--DateTimeFormatter
SimpleDateFormat并不是线程安全的,因为在SimpleDateFormat中持有一个Calendar类对象在Parse 和Format方法时会调用calendar.setTime(date)方法,如果在多线程环境下运行,会出现线程安全问题,为了解决这个问题,可以使用以下方法: 1.需要的时候创建新实例 2.使用同步:同步SimpleDateFormat对象 3.使用ThreadL原创 2017-06-15 11:40:19 · 10430 阅读 · 2 评论 -
单例模式---懒汉与饿汉模式和静态内部类实现
单例模式是最基本的 java 设计模式之一 主要有两种设计方法,主要分为饿汉式与懒汉式饿汉式比较简单,直接使用常量即可,主要代码如下: private static final SingleModel INSTANCE = new SingleModel(); private SingleModel() { } public static SingleModel g原创 2017-05-25 11:44:26 · 2652 阅读 · 0 评论 -
jdk与cglib动态代理
java中实现动态代理主要有两种方式,jdk动态代理与cglib动态代理。 jdk动态代理依靠实现类的接口实现,因此被代理的类必须要实现某个接口。 cglib依靠继承被代理的类的子类实现,因此被代理的类必须不能是final类型的类,且被代理的方法也不能是final类型方法。 spring中动态代理是依靠两者同时实现的,一般情况下spring会优先使用jdk动态代理,如果发现被代理的类不能使用j原创 2017-02-27 16:52:03 · 327 阅读 · 0 评论 -
NIO 使用的简单例子
1.FileChannel fileChannel 是阻塞的,不可以运行在非阻塞模式,因此不能被注册到 Selector 上 简单例子如下:这里写代码片原创 2017-06-05 17:57:18 · 533 阅读 · 0 评论 -
两道多线程打印题目
1.每个线程打印不同的字符public class ThreadPrint{ public static void main(String[] args) throws InterruptedException { String str = "ABCD"; int index = 4; Character c;原创 2017-05-27 10:19:22 · 446 阅读 · 0 评论 -
redis实现分布式锁
使用java自带的lock框架可以很好的解决并发问题,但如果是分布式系统的话,就不能通过这个方法解决并发问题,此时可以使用redis实现并发锁来解决这个问题使用redis锁有两个重要函数需要介绍SETNX命令(SET if Not EXists)语法:SETNX key value功能:当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给原创 2017-02-14 11:15:59 · 1023 阅读 · 0 评论 -
synchronized 中的wait/notify 与 Condition 中的await/single的区别
作者:Calvin Carson 链接:https://www.zhihu.com/question/50870223/answer/145177436 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1)java 6 及以后,完成同样的功能,一般来说Lock及Condition 性能上没有优势; 2)Lock 接口的 lockInterruptibly()转载 2017-05-26 10:52:44 · 2233 阅读 · 0 评论 -
怎么理解 Condition
在java.util.concurrent包中,有两个很特殊的工具类,Condition和ReentrantLock,使用过的人都知道,ReentrantLock(重入锁)是jdk的concurrent包提供的一种独占锁的实现。它继承自Dong Lea的 AbstractQueuedSynchronizer(同步器),确切的说是ReentrantLock的一个内部类继承了AbstractQueued转载 2017-05-26 10:30:19 · 341 阅读 · 1 评论 -
ArrayList 与 LinkedList性能比较
今天看到有人提问 arrayList 与 LinkedList 性能比较的问题,为此专门测试了下两者的插入,删除,访问效率 经过测试大概得出以下结论: ArrayList 与 LinkedList 在顺序插入时(末尾插入),数据量较小时(100000以内)LinkedList的插入效率优于 arrayList(但不明显,最多几倍的差距),但数据量更大时(40w 以上)此时顺序插入 arrayl原创 2017-05-04 11:14:01 · 600 阅读 · 0 评论 -
java nio之Buffer
Buffer对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索 Buffer类家谱: CharBuffer IntBuffer LongBuffer DoubleBuffer ShortBuffer FloatBuffer ByteBuffer MappedByteBuffer- 基本属性 容量(Capacity) 缓冲区能够容纳数据元素的原创 2017-03-07 13:57:38 · 192 阅读 · 0 评论 -
java Unicode编码转换为汉字
public static String convert(String unicodeStr) { if (null == unicodeStr || "".equals(unicodeStr)) { return unicodeStr; } StringBuilder sb = new StringB原创 2016-08-11 14:56:00 · 1001 阅读 · 0 评论 -
蜂窝小区最短路径
public static int GetShortestPathLength(int iFirstValue, int iSecondValue) { int[] firstResult = getXYZ(iFirstValue); int[] secondResult = getXYZ(iSecondValue); int i = Math转载 2014-10-27 21:41:03 · 1493 阅读 · 0 评论