1、什么是redis? 2、redis为什么这么快? 3、redis支持哪些数据类型?每个数据类型的应用场景你知道吗? 4、redis的发布(pub)/订阅(sub)功能有了...
1、什么是redis? 2、redis为什么这么快? 3、redis支持哪些数据类型?每个数据类型的应用场景你知道吗? 4、redis的发布(pub)/订阅(sub)功能有了...
你是如何评估一个线程池需要设置多少个线程? 大致上根据应用类型来区别设置。原因是IO密集型应用,为了提高IO的并发量,可以设置多一些线程,而CPU密集型为了减少线程上下文切换...
什么是回表查询呢? 首先需要从InnoDB的索引实现说起,InnoDB有两类索引:1、聚集索引(clustered index)2.、普通索引,也叫二级索引(secondar...
I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通...
volatile是java提供的一种稍弱的同步机制。这个“稍弱”体现在: 不需要加锁来保持同步,也意味着不会出现线程阻塞。 只能实现对单个对象的同步,不能保证多个对象或者代码...
SynchronizedMap是另外一种保证线程安全的Map容器,实现方式是将线程不安全的Map容器包装成自己的属性m,对m的操作使用同步代码块包裹着,这种保证线程安全的效率...
1. 前提知识 现代计算机中,cpu的计算速度越来越快,相比之下,对存储设备、内存中的数据的读取与写入的效率却迟迟跟不上cpu的计算速度,两者之间的差距越来越大,这也导致了对...
jdk1.6默认开启偏向锁和轻量级锁,可以通过设置参数-XX:-UseBiasedLocking来关闭偏向锁,也可以设置参数-XX:+UseHeavyMonitors来禁止锁...
较早的jdk版本中,synchronized属于重量级锁(Monitor实现),在线程争用不到锁的时候将会线程阻塞,并且下次争用锁的时候还需要从阻塞状态醒来,这就是两次线程状...
synchronized不可以禁止指令重排序的吧,单例模式-懒汉式中的双重检验,单例对象还需要用volatile修饰实例,就是为了保证初始化实例的时候发生指令重排序。
synchronized实现原理,以及JVM对锁性能的优化线程安全,是Java并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要原因有两点:1,存在共享数据(也称临界资源)2,存在多条线程,共同操作共享数据。 本文由浅入...
锁,一般是多个线程争抢同一资源(可以是对象、代码块、方法)时,为了保证对资源的操作是线程安全的,所以对资源上锁,防止被别的线程修改。Java中,锁的概念有很多,比如悲观锁、乐...
因为HashMap并不是线程安全的,在并发操作的情况下,HashMap并不适合使用,所以我们需要一种线程安全的容器来储存key-value类型的数据。在jdk1.0中提供了H...
synchronized是Java中的一个关键字,用来保证同一时间内,只能有一个线程可以进入到临界区(互斥性)。同时,它还保证在临界区中的共享变量的内存可见性。 synchr...
JDK1.7 JDK1.8 在put的时候出现扩容的具体细节这里就不阐述了,想了解的同学可以参考我的另外一篇文章 https://www.jianshu.com/p/c5f3...
HashMap中的扩容主要分为两个步骤。 第一,对数组大小进行扩容。那么HashMap在什么情况下会触发扩容呢?HashMap中定义了一个扩容的阈值,该阈值的计算公式为 : ...
在JDK1.7中 在JDK1.8中
背景 当下绝大部分互联网公司采用的是分布式的架构系统,而分布式系统中有一些场景需要使用到全局性唯一ID,例如:订单编号、付款单编号、交易流水号等等,在这之前,我们可以使用UU...
对象的内存分配,大部分时间来说,就是在堆空间上的分配(当然也有可能经过JIT编译后被拆散为标量类型并间接地栈上分配),当然,对象分配的规则并不是固定不变的,具体的分配细节取决...