PCM5566 Station

Only fear can defeat life.

谈谈HashMap线程不安全的体现

令人抓狂的HashMap

面试经常会问到HashMap是否线程安全,答案众所周知——HashMap是线程不安全的。为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢? 我们都知道HashMap初始容量大小为16,一般来说,当有数据要插入时,都会检查容量有没有超过设定的thredhold,如果超过,需要增大Hash表的尺寸,但是这样一来,整个Hash表里的元素都需要被重算一遍。这...

使用Redis进行缓存

Redis使用一二三

前台系统访问后台管理系统,如果要使用缓存,那么缓存逻辑一定放在后台系统。且要放在业务层。 当然如果你想在前台系统做缓存,也是可以通过redis,一样的,就是在前台系统service调用restapi前进行redis查询。后台做就是在service查询数据库之前进行redis查询。 当使用redis缓存时,要注意,在业务代码(service类)中,首先先从redis中去获取,然后retur...

Comparable Vs Comparator

困扰许久,终于弄清

Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话...

Shiro与Spring Security到底有什么不同?

Shiro 首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。 Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点: 易于理解的 Java Security API; 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,Activ...

TreeSet类集的排序杂谈

第二篇博客 关于java类集TreeSet的杂谈 既然TreeSet本身是可以排序的,那么它是怎么实现排序的呢? class Person{ private String name; private int age; public Person (String name,int age){ this.name=name; th...

JDK高并发的包(集合、多线程、锁)小结

关于JDK的总结

1、java 高并发包所采用的几个机制(CAS,volatile,抽象队列同步) CAS(乐观操作),jdk5以前采用synchronized,对共享区域进行同步操作,synchronized是重的操作,在高并发情况下,会引起线程频繁切换;而CAS是一种乐观锁机制,compare and swap,不加锁,而是假设没有冲突去完成,若有冲突会重试(非阻塞)。compare&swap是...

令人抓狂的HashMap

从源码深刻认识HashMap

一、HashMap之put(K key,V value)方法 判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容; 根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向6,如果table[i]不为空,转向3; 判断table[i]的首个元素是否和...