- 博客(35)
- 资源 (4)
- 收藏
- 关注
翻译 Caffeine使用指南
Caffeine使用指南Caffeine基于java8的高性能,接近最优的缓存库。Caffeine提供的内存缓存使用参考Google guava的API。Caffeine是基于Google guava和 ConcurrentLinkedHashMap的设计经验上改进的成果。Caffeine可以通过建造者模式灵活的组合以下特性:通过异步自动加载实体到缓存中基于大小的回收策略基于时间的回收...
2018-12-11 11:15:12
7125
原创 fastjson反序列化带有get没有set的list字段,没有值
反序列化带有get方法的list字段但是对于对象中带有get方法的list字段,fastjson的处理:通过get方法获取list或map,如果是null不会处理。以下带来。com.alibaba.fastjson.parser.deserializer.FieldDeserializer类 setValue方法片段。 1234567891011121...
2018-11-22 14:19:10
3609
1
原创 fastjson自定义枚举反序列化
自定义的枚举类型反序列化fastjson默认提供的对枚举类型的反序列化的方式有两种根据枚举的name 根据枚举的ordinal值但是如果需要通过自定义的值反序列化成枚举,就需要自定义反序列化器。如下面枚举,我想通过EnumValue接口返回的value值进行反序列化 12345678910111213141516 in...
2018-10-28 12:33:00
10136
1
原创 java线程池和Executor架构
为什么要使用线程池线程的创建和销毁会带来系统的开销。通过线程池进行线程的管理,可以进行线程的复用,避免线程频繁的创建和消耗。《java并发编程的艺术》 合理利用线程池能够带来三个好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会...
2018-09-25 21:24:35
218
原创 EventListenerSupport实现事件监听
EventListenerSupport是apache lang3包提供用于处理事件监听的解决方案。pom <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifact...
2018-09-20 15:13:35
694
原创 Fork/Join框架简介
Fork/Join框架简介fork/join是java7提供的任务并行执行的框架。fork就是将大任务分解成若干子任务,join就是将子任务的执行结果聚合成整个任务的结果。Fork/Join框架通过两个类实现ForkJoinTask ForkJoinTask负责分解任务和合并结果。通过实现compute方法,把任务分成多个子任务的ForkJoinTask,调用子任务的fork方法执行任...
2018-09-20 15:02:13
184
原创 ConcurrentHashMap源码解析(jdk1.8)
jdk8的ConcurrentHashMap改动非常大。放弃了之前segment锁,改用cas+synchronized来实现同步。常量含义 /** * table数组最大容量。 */ private stactic final int MAXIMUM_CAPACITY = 1 << 30; /** * 默认初始化容量,是...
2018-09-18 20:30:25
246
原创 12、ReentrantLock中的公平锁和非公平锁的原理
ReentrantLockReentrantLock内部是通过AQS实现锁的功能,有公平锁和非公平锁两种实现。公平锁,即锁的获取顺序按线程申请锁的先后顺序。 非公平锁,当一个线程t1申请锁时,锁刚好释放。即使已有其他线程在t1之前申请锁排队,线程t1还是会获取锁。这样减少了线程的等待唤醒的可能,减少上下文切换带来的开销。因为获取锁的顺序和申请顺序可能不一致所以叫非公平锁。前置技能(先了...
2018-09-04 18:04:59
617
原创 11、JUC之AQS中的CLH队列
CLH队列AQS内部维护着一个FIFO的队列,即CLH队列。AQS的同步机制就是依靠CLH队列实现的。CLH队列是FIFO的双端双向队列,实现公平锁。线程通过AQS获取锁失败,就会将线程封装成一个Node节点,插入队列尾。当有线程释放锁时,后尝试把队头的next节点占用锁。CLH队列结构NodeCLH队列由Node对象组成,Node是AQS中的内部类。重要属性 /...
2018-09-03 14:18:46
921
2
原创 十、JUC之AQS
AQS即AbstractQueuedSynchronizer,是jdk提供的一个用于实现阻塞锁和依赖于先进先出等待队列的相关同步器(信号量,事件等)。AQS是concurrent包的基石。AQS 状态。它依赖一个int类型的原子变量来表示状态。private volatile int state;//共享变量,使用volatile修饰保证线程可见性对state操作的基本方法...
2018-09-01 21:52:24
208
原创 监听文件改变 fileAlterationMonitor
监听文件改动Apacha common.io2.0提供了监听文件变化的功能。功能由三个组件组成。 监听器 FileAlterationListener 用于实现文件改变时触发的行为。 观察者 FileAlterationObserver 用于观察文件的改变,通知注册的监听器执行相应的事件。 监视器 FileAlterationMonitor 通过一线程...
2018-08-25 00:05:58
7805
原创 九、并发工具类之Semaphore
流量控制 SemaphoreSemaphore是一个计数的信号量。初始化时分配一个配额permits。在访问前需要用acquire()方法申请一个配额,访问结束后调用release()释放配置。申请配额时如果配额不足将会阻塞。例子:有2个足球,4个人射门练习。每个人射门后都要把球拿回来,后面的人才能射球。public class Player implements Runnable...
2018-08-24 17:46:10
226
原创 八、并发工具类之CyclicBarrier
CyclicBarrierCyclicBarrier和CountDownLatch功能相似。CyclicBarrier是所有参与线程互相等待对方执行到某点,再一起执行后面程序。与CountDownLatch一样,CyclicBarrier的构造函数也需要一个int类型的参数 parties,表示参与者数量。每一个线程调用cyclicBarrier对象的await方法就会进入等待。直到参与线...
2018-08-24 10:58:39
166
原创 七、并发工具类之CountDownLatch
CountDownLatch一个线程需要等到其他线程进行某操作时,可以使用CountDownLatch。 CountDownLatch构造方法,带有一个int类型的参数。public CountDownLatch(int count) 当一个线程调用countDownLatch.await()时,线程会等待。直到其他线程执行 countDownLatch.countDown()。每...
2018-08-23 21:21:41
174
原创 六、多线程-CAS
CAS锁的开销极大。在某些场景,如保证一个变量的 read-modify-write操作的原子性。这种场景可以通过使用CAS解决而不需要用到锁。CAS,Compare and swap 比较并交换,是一种乐观锁的实现方式。是一个中由处理器保证原子性的if-then-act操作。它通过提供一个变量内存位置,预期值(旧值)和新值。将预期值和变量的当前值进行比较,如果相等即证明变量并没有被改变,...
2018-08-19 21:38:18
660
原创 五、多线程协作之等待唤醒机制
线程间协作多线程开发中,线程往往都不是孤立的。一个线程往往需要多线程协作完成其待执行的任务。等待唤醒机制就是用来协调线程间的协作。例如:街边的小吃店都是生产一份等销售完再生产,这是典型的生产者消费者模式。下面用代码实现这个场景。等待唤醒机制的好处: 节省cpu。线程间通讯也可以通过轮询的方式来检查条件进行协作,但是会消耗大量cpu。用生产者/消费者模式举例。在生产者生产的时候,消费者并不需...
2018-08-19 19:27:24
339
原创 四、线程同步-volatile关键字
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。 例子 private boolean stop=true; @Test public void test() throws Excep...
2018-08-09 11:23:15
242
原创 三、java多线程同步-锁
锁概述锁是解决线程安全问题的最基本的解决方案。通过加锁,使得会发生线程安全问题的代码单线程串行。从而解决线程安全问题。锁的分类公平锁和非公平锁公平锁是按照锁申请的顺序来分配锁资源。 非公平锁是允许插队的,可能后申请的线程比先申请的线程优先获取锁。java中锁一般默认都是非公平锁。因为公平锁为了保障公平往往会增加线程的唤醒和暂停。例如一个运行中的线程要获取锁必须先检查有没有其...
2018-08-08 15:17:02
230
原创 二、多线程存在的问题和Java内存模型
多线程存在的问题多线程运用得好可以大大提高系统的性能。但是使用不当也会对系统造成毁灭性灾难。线程安全问题。多个线程操作共享数据时,会产生线程安全问题。导致读取脏数据或者丢失更新等问题 线程活性问题。由于程序问题导致一个线程一直处于非Runnable状态或者处于Runnable状态但执行的任务没有紧张称为线程活性问题。例如:两个线程,线程1需要先占用锁1,再占用锁2。线程2需要先占用锁2,...
2018-08-06 14:44:02
204
原创 一、java多线程基础
多线程的概念进程是程序运行的实例。启动一个java程序其实就是启动了一个jvm的进程。进程是程序向操作系统申请资源(内存空间、文件句柄等)的基本单位。线程是进程中可以独立执行的最小单位。进程和线程的关系,可以比喻成一个项目组和组员的关系。项目组完成一个项目需要需求,开发,测试。这些往往都是并行的。需要需求,开发和测试人员协作完成。他们共享项目组的资源,如需求文档,功能代码等。为什么...
2018-08-04 14:40:03
191
原创 高性能集合框架——fastUtils
FastUtils简介fastutil通过提供特定类型的映射,集合,列表和优先级队列来扩展Java™集合框架,并且占用内存很少,并且可以快速访问和插入; 还提供大(64位)数组,集和列表,以及用于二进制和文本文件的快速,实用的I / O类。性能特定类型的Map和Set比标准的集合类快上2-10倍。但是以对象作为key的HashMap往往比jdk的HashMap慢,因为fastutil不...
2018-07-25 11:52:14
2475
1
原创 Log4j代码形式配置
Log4j代码形式配置 Logger:日志记录器,负责收集处理日志记录 (如何处理日志)Appender:日志输出目的地,负责日志的输出 (输出到什么 地方)Layout:日志格式化,负责对输出的日志格式化(以什么形式展现) 代码Logger logger = LogManager.getLogger(logName);Logger.setLevel(Le...
2018-07-17 17:03:19
2052
原创 ThreadLocal的原理
ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。Thread-1中只有一个ThreadLocal.ThreadLocalMap(图中列就是一个ThreadLocal.ThreadLocalMap),而ThreadLocal设置值进去Thr...
2018-02-24 11:01:56
201
原创 echarts 中国地图,根据省份数值高低改变省份颜色深浅
function randomValue() { return Math.round(Math.random()*1000);}option = { tooltip: {}, visualMap: { min: 0, max: 2000, text:['High','Low'], realtime: fa...
2018-02-09 20:32:53
17787
5
原创 【netty】 ByteBuf的常用API总结
一、创建1、池化创建ByteBufAllocator获取ByteBufAllocatorChannel channel = ...;ByteBufAllocator allocator = channel.alloc();//1....ChannelHandlerContext ctx = ...;ByteBufAllocator allocator2 = ctx.allo
2018-01-21 11:33:34
12800
原创 一、netty初学,简单的echo服务器,客户端
无论服务器还是客户端都是由下面两步组成1、ChannelHandler 用与处理各种事件的逻辑处理。决定了连接创建后和接收到信息后该如何处理。直接或简接要实现ChannelInboundHandler 接口.2、Bootstrap启动服务器或客户端 服务器用 ServerBootstrap 客户端用 BootStrap。pomdependency>
2018-01-15 14:47:12
792
原创 分治法求和最大的子数组
package orgi2;import java.util.Arrays;public class MaxArray { /** * 分治法求和最大的子数组 * @param args */ public static void main(String[] args) { int[] arr={13,-3,25,20,-4,-16,-23,18,20,-7,12,-5
2017-07-22 14:52:48
753
原创 java实现归并排序
package ogri1;import java.util.Arrays;public class ConflationSort {public static void main(String[] args) {int arr[]={4,3,1,4,5,6,7,8,2,9};mergeSort(arr);System.out.println(Arr
2017-07-21 23:20:19
205
原创 java实现插入排序
package ogri1;import java.util.Arrays;public class InsertSort {public static void main(String[] args) {int arr[]={4,3,1,4,5,6,7,8,2,9};sort(arr);System.out.println(Arrays.toStr
2017-07-21 23:16:17
183
原创 struts2环境搭建
第一步导入 jar 包asm-3.3.jarasm-commons-3.3.jarasm-tree-3.3.jarcommons-fileupload-1.3.jarcommons-io-2.0.1.jarcommons-lang3-3.1.jarcommons-logging-1.1.3.jarfreemarker-2.3.19.jarjavass
2016-07-03 22:24:27
214
原创 java实现读写excel表格
需要jar包poi-3.15-beta1.jarpoi-excelant-3.15-beta1.jarpoi-ooxml-3.15-beta1.jarcurvesapi-1.03.jarxmlbeans-2.6.0.jarpoi-ooxml-schemas-3.15-beta1.jar创建一个excelpublic static void
2016-05-03 15:54:44
661
原创 js实现简易的贪吃蛇
var direction=0;//0 上 1右 2下 3左 var snake=new Array(); //记录蛇的数组 var array=new Array(); //记录地图的数组 var food=null;//记录食物 var isChange=true;//记录是否可以改变方向 wind
2016-05-03 15:51:43
389
原创 java实现点击图片文字验证码
效果图如上,package cn.gdin.captcha;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;impo
2016-04-16 15:54:27
6063
9
原创 使用spring mybatis时,开启tomca失败
使用spring mybatis时,开启tomca时一直 Initializing Spring root WebApplicationContext,开启不了,后来mybaties 的maper文件的resultType不正确导致的
2016-04-12 20:45:16
230
原创 将json格式的数组字符串转换为java集合
/** * 将json数字字符串转化为相应对象集合 * @param jsonArray json数组字符串 * @param clazz Class类型 * @return * @throws Exception */ public static List parseJSONArray(String jso
2016-04-12 14:59:54
969
java,jquery,python api文档
2018-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人