Java
文章平均质量分 93
楚湘潇瑶
这个作者很懒,什么都没留下…
展开
-
如何写一个不可变类?
不可变的对象指的是一旦创建之后,它的状态就不能改变。String类就是个不可变类,它的对象一旦创建之后,值就不能被改变了。阅读更多: 为什么String类是不可变的不可变对象对于缓存是非常好的选择,因为你不需要担心它的值会被更改。不可变类的另外一个好处是它自身是线程安全的,你不需要考虑多线程环境下的线程安全问题。阅读更多: Java线程教程以及Java多线程面试问题转载 2016-11-26 17:24:17 · 1457 阅读 · 0 评论 -
HashMap的实现和性能分析
转载自:http://blog.csdn.net/windsunmoon/article/details/45702253Java集合框架强大、简单、易用。尤其在设计业务逻辑的编程中,集合框架可以说是使用最多的类。Hashmap作为其中一员,是一种把键(key)和值(value)的结构,在实际引用中及其广泛。本篇简单分析java中hashmap的实现,并简单分析它的一些性能,使用过程中的需要注转载 2016-11-25 14:10:36 · 454 阅读 · 0 评论 -
HashMap的工作原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入转载 2016-11-26 17:06:47 · 236 阅读 · 0 评论 -
Java并发编程——this引用逸出("this" Escape)
转载自:http://blog.csdn.net/flysqrlboy/article/details/10607295并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了。这是危及到线程安全的,因为其他线程有可能通过这个逸出的引用访问到“初始化了一半”的对象(partially-constructed object)。这样转载 2016-11-26 17:35:01 · 755 阅读 · 0 评论 -
为什么volatile不能保证原子性而Atomic可以?
在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容转载 2016-12-17 08:48:47 · 379 阅读 · 0 评论 -
非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态转载 2016-12-17 08:56:43 · 764 阅读 · 0 评论 -
深入理解Java Proxy机制
动态代理其实就是Java.lang.reflect.Proxy类动态的根据您指定的所有接口生成一个class byte,该class会继承Proxy类,并实现所有你指定的接口(您在参数中传入的接口数组);然后再利用您指定的classloader将 class byte加载进系统,最后生成这样一个类的对象,并初始化该对象的一些值,如invocationHandler,以即所有的接口对应的Meth转载 2017-01-22 15:47:13 · 255 阅读 · 0 评论