自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Java双重检查锁的错误

1.错误的双重检查锁实现public class DoubleCheckedLocking { // 1 private static Instance instance; // 2 public static Instance getInstance() { // 3 if (instance == null) { // 4:第一次检查 synchr...

2018-07-26 20:33:55 542 1

原创 Final域的重排序规则

*摘自《Java并发编程的艺术》——方腾飞1.final类型为基本类型时对于final域,编译器和处理器要遵守两个重排序规则。1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。总结来说,对final域的写入操作(初始化...

2018-07-26 18:36:42 1729

原创 volatile的特性

*摘自《Java并发编程的艺术》——方腾飞1.volatile的特性        理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下。class VolatileFeaturesExample { volatile long vl = 0L; // 使用volat...

2018-07-25 20:07:51 1672

原创 Java5及以上版本中对内存读写的原子性

从JSR-133内存模型开始(即从JDK5开始),仅仅只允许把一个64位long/double型变量的写操作拆分为两个32位的写操作来执行,任意的读操作在JSR-133中都必须具有原子性(即任意读操作必须要在单个读事务中执行)...

2018-07-25 18:13:07 230

原创 happens-before,内存重排序,数据依赖的理解

在JMM(Java内存模型)中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。happens-before原则规则:程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作; 锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作; volatile变量规则:对一个变量的写操作先行发生于后...

2018-07-24 12:43:13 877 1

原创 Redis集群批量操作

      众所周知,Redis集群是没法执行批量操作命令的,如mget,pipeline等。这是因为redis将集群划分为16383个哈希槽,不同的key会划分到不同的槽中。但是,Jedis客户端提供了计算key的slot方法,已经slot和节点之间的映射关系,通过这两个数据,就可以计算出每个key所在的节点,然后使用pipeline获取数据。具体代码如下:/** * 根据key计算sl...

2018-07-23 17:32:22 4990 1

原创 Redis相关问题和解决方法记录

1.缓存穿透        缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中。所以每次查询这条数据的时候,都先查一遍缓存,然后再查一遍数据库。解决的办法是,在缓存中保存一个空值,来标记该数据在数据库中不存在,同时给该值设置一个较短的过期时间,防止被恶意攻击时产生太多的key。2.缓存无底洞        键值数据库由于通常采用哈希函数将key映射到各个节点上,造成key的...

2018-07-23 16:53:40 464

原创 Java泛型理解

Java集合工具类Collections里定义了sort方法,里面的泛型很有意思:<T extends Comparable<? super T>>对于这个泛型,我们来理解一下:首先,泛型T是要继承Comparable接口的,这个没什么疑问。重点是Comparable接口里定义的泛型,必须是泛型T或者泛型T的父类。什么意思呢?如果我有两个类,A和B,A是B的父类...

2018-07-19 13:18:09 693

原创 Java泛型集合理解

1.只读集合使用<? extends T>定义的集合,只能读取,不能插入。原因是什么呢?我们从头开始分析:首先,我们知道,<? extends T>修饰的集合,表示该集合内部的元素类型只能是T或者是T的子类,比如,有A,B,C三个类,B类和C类继承了A类,<? extends A>的集合,可以插入A,B,C三个子类的实例。那么,当我们插入这个三个实例之后...

2018-07-19 12:50:47 2432

原创 java四种引用

1.强引用强引用指向的对象,在任何时候都不会被回收。除非将引用置为null/** * 强引用 */public class StrongReferences { public static void main(String[] args) { //创建一个对象,new出来的对象都是分配在java堆中的 Sample sample = new Samp...

2018-07-18 12:00:13 164

原创 volatile关键字修饰对象时注意事项

下面的代码实现无锁循环打印A,B,C的功能,但是volatile关键字用错的话,会导致数据不打印1.当volatile修饰公共的成员变量时public class ThreadTest { private static volatile C c = new C(); public static void main(String[] args) { new Thread(n...

2018-07-10 18:30:40 7274

原创 线程池参数理解

之前学习的并发知识,现在记录一下主要参数说明线程池(ThreadPoolExecutor),Jdk1.5版本开始使用,构造方法参数如下(来自ThreadPoolExecutor源码):corePoolSize:核心线程数,线程池启动时就会创建的线程数量。即使核心线程是空闲的,也不会被回收,除非调用了allowsCoreThreadTimeOut方法为trueexecutorS...

2018-07-02 18:15:03 4537

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除