
java
文章平均质量分 83
flysharkym
这个作者很懒,什么都没留下…
展开
-
存取之美 —— HashMap原理、源码、实践
存取之美 —— HashMap原理、源码、实践 HashMap是一种十分常用的数据结构,作为一个应用开发人员,对其原理、实现的加深理解有助于更高效地进行数据存取。本文所用的jdk版本为1.5。 使用HashMap 《Effective JAVA》中认为,99%的情况下,当你覆盖了equals方法后,请务必覆盖hashCode方法。默认情况下,这两者会采用Object的“原生”转载 2011-03-17 14:12:00 · 751 阅读 · 0 评论 -
JUC AbstractQueuedSynchronizer原理解析
在J2SE 1.5的java.util.concurrent包(下称j.u.c包)中,大部分的同步器(例如锁,屏障等等)都是基于AbstractQueuedSynchronizer类(下称AQS类),这个简单的框架而构建的。这个框架为同步状态的原子性管理、线程的阻塞和解除阻塞以及排队提供了一种通用的机制。原创 2015-04-03 17:59:04 · 1178 阅读 · 0 评论 -
ConcurrentHashMap源码分析
ConcurrentHashMap是HashMap更高效的线程安全版本的实现。不同于Hashtable简单的将所有方法标记为synchronized,它将内部数组分成多个Segment,每个Segment又是一个特殊的hash表,这样设计是为了减少锁粒度。另外它内部通过精巧的实现,让很多读操作(get(),size()等)甚至不需要上锁。原创 2015-03-09 11:33:13 · 1220 阅读 · 0 评论 -
ConcurrentLinkedQueue原码解析
ConcurrentLinkedQueue是一个基于单链表的无界线程安全队列,该队列是FIFO的。ConcurrentLinkedQueue/ConcurrentLinkedDeue和LinkedBlockingQueue/LinkedBlockingDeue相比,不同点在于它们不提供阻塞功能,并且是Lock-Free的,而后者则是利用ReentrantLock实现的。原创 2015-04-14 18:02:39 · 1360 阅读 · 0 评论 -
ThreadLocal源码解析
ThreadLocal经常被使用到,但是一直没有研究过它的实现原理。在看源码之前,我猜测它是这样设计的:ThreadLocal中包含一个Map<Thread,Map<ThreadLocal, V>>属性,在使用时,通过Thread.currentThread()获取到当前线程,从而根据Key,找到Map<ThreadLocal, V>,后来发现是错的。所以本文通过阅读JDK1.7源码,来解析ThreadLocal的设计思想和原理。原创 2015-03-28 19:53:13 · 1086 阅读 · 0 评论 -
ReentrantReadWriteLock原理分析
ReentrantReadWriteLock顾名思义是可重入的读写锁,允许多个读线程获得ReadLock,但只允许一个写线程获得WriteLock。原理介绍1. ReentrantReadWriteLock类图:2. ReentrantRead原创 2015-04-09 16:13:09 · 4106 阅读 · 0 评论 -
利用spring session解决共享Session问题
Spring Session是Spring的项目之一,GitHub地址:https://github.com/spring-projects/spring-session。Spring Session提供了一套创建和管理Servlet HttpSession的方案。Spring Session提供了集群Session(Clustered Sessions)功能,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题。原创 2015-05-15 12:27:41 · 85821 阅读 · 10 评论 -
Spring依赖注入DI
1. Spring是什么?Spring是一个开源框架,是于2003年兴起的一个轻量级Java开发框架。它是为了解决企业应用开发的复杂性而创建的。说它是轻量级的是因为从jar包大小与开销两方面而言Spring都是轻量的。Spring框架目的:解决企业应用开发的复杂性Spring框架应用范围:任何Java应用为什么选择使用Spring?现实往往是这样的:前辈原创 2015-04-01 14:17:48 · 1214 阅读 · 0 评论 -
java热加载技术hotswap
关于hotswap 是一个允许在运行状态下无限制的修改加载类文件的Java虚拟机补丁。当前java虚拟机的动态加载机制只允许修改类的方法体,而打了hotswap补丁以后,可以增加,删除类属性,方法,甚至可以改变一个类的父类。Hotswap补丁是基于GPL v2.转载 2016-04-03 13:19:56 · 4867 阅读 · 0 评论 -
java-memory-model
本文是InfoQ上的《深入理解Java内存模型》 java-memory-model 系列文章汇总列表。同时列举了每篇文章的主要内容:深入理解Java内存模型(一)——基础http://www.infoq.com/cn/articles/java-memory-model-1--内容摘要:重排序从java源代码到最终实际执行的转载 2016-03-11 15:58:10 · 1317 阅读 · 0 评论 -
ConcurrentSkipListMap原码解析
SkipList介绍1. SkipList(跳表),在理论上能够在O(log(n))时间内完成查找、插入、删除操作。SkipList是一种红黑树的替代方案,由于SkipList与红黑树相比无论从理论和实现都简单许多,所以得到了很好的推广。SkipList是基于一种统计学原理实现的,有可能出现最坏情况,即查找和更新操作都是O(n)时间复杂度,但从统计学角度分析这种概率极小。使用SkipL原创 2015-04-13 17:12:52 · 1499 阅读 · 0 评论 -
JVM锁机制volatile/synchronized/lock
1.深入JVM锁机制1-synchronizedhttp://blog.youkuaiyun.com/chen77716/article/details/66187792.深入JVM锁机制2-Lock转载 2014-09-09 16:51:30 · 1878 阅读 · 1 评论 -
自旋锁、排队自旋锁、MCS锁、CLH锁
原文地址:自旋锁、排队自旋锁、MCS锁、CLH锁注:文中的代码忽略了lock和unlock不成对出现的异常情况。另外文中代码可以通过引入ThreadLocal类来去掉lock/unlock方法的参数。自旋锁(Spin lock)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自转载 2015-04-01 16:46:29 · 1026 阅读 · 0 评论 -
jni使用--java native 调用c++ boost regex库例子
编写BoostRegexStrategy.javapackage com;public class BoostRegexStrategy { static{ try{ System.loadLibrary("boost_regex"); }catch(UnsatisfiedLinkError e){ //TODO } } public原创 2012-08-14 21:34:43 · 1738 阅读 · 0 评论 -
java如何过滤无效的utf-8字符?
直接上代码了:public static String stripNonCharCodepoints(String input) { StringBuilder retval = new StringBuilder(); char ch; for (int i = 0; i input.length(原创 2013-09-26 11:15:22 · 4641 阅读 · 1 评论 -
Java regex正则表达式类似死循环问题
Java regex正则表达式类似死循环问题,详见:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6988218这个问题其实是由于正则表达式很复杂时,java regex复杂度过高(复杂度成指数级),导致类似死循环的问题。测试代码://public static void main(String[] args) {原创 2012-07-24 22:41:01 · 5544 阅读 · 0 评论 -
Java自动装箱和自动拆箱的陷阱
这里有一段测试代码,猜猜执行结果是什么吧?public static void main(){ Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 321; Long g = 3L; System.out.println(c == d);原创 2013-09-18 15:51:59 · 920 阅读 · 0 评论 -
Java HashMap多线程下为什么会死循环?
疫苗:Java HashMap的死循环,链接:http://coolshell.cn/articles/9606.html转载 2013-10-16 16:49:42 · 1229 阅读 · 0 评论 -
大端小端模式
1.大端小端格式详解为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题原创 2015-03-21 18:42:05 · 937 阅读 · 0 评论 -
HashMap源码分析
转自:HashMap源码分析 需要提到的是,HashMap内部的容量设计为2的幂,是为了方便扩容和取余运算,都只需要采用二进制位运算即可1.扩容:newCapacity 2.取余:当Length=2^n时,hash%Length=hash&(Length-1)学过数论的应该知道,取余运算相对耗时,而把除数设计为2的幂可以简化为按位与运算从而提高程序计算速度。转载 2015-04-01 11:30:03 · 864 阅读 · 0 评论 -
Java 理论与实践: 处理 InterruptedException
Java 理论与实践: 处理 InterruptedException注:这里仅转了文章开头部分内容,详细内容请查看原网页。这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep()。但是编译器或 IDE 报错说没有处理检查到的InterruptedException。InterruptedException 是什么呢,为什么转载 2015-03-30 15:53:18 · 1019 阅读 · 0 评论 -
sun.misc.Unsafe源代码
转自:源码剖析之sun.misc.Unsafe Unsafe类提供了硬件级别的原子操作,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。Java并发包(java.util.concurrent)中大量使用了CAS操作,涉及到并发的地方都调用了sun.misc.Unsafe类方法进行CAS操作。Unsafe类还提供了volat原创 2015-03-26 16:35:33 · 3210 阅读 · 0 评论 -
How to get method parameter names?
如何获取方法参数命名?1.通过javassist获取e()); Class<?>[] paramTypes = method.getParameterTypes(); String[] paramTypeNames = new String[method.getParameterTypes().length]; for (int i = 0; i <原创 2017-01-05 15:18:55 · 2092 阅读 · 0 评论