高并发
蛋焊工
搬砖小学生
展开
-
synchronized修饰普通方法和静态方法区别
synchronized关键字修饰普通方法时,获得的锁是对象锁,也就是this对应的实例,如果多个线程通过不同的对象来调用方法,那么他们的锁就是不一样的,不会造成阻塞。而修饰静态方法时,锁是类锁,也就是类名.class,多个线程调用该类的同步的静态方法时,都会阻塞。...原创 2021-08-11 21:52:30 · 1225 阅读 · 0 评论 -
高并发(2)之CAS(Compare and Swap)
CAS : compare and swap,比较和交换CAS就是有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。但是CAS仍然存在三大问题:ABA问题、自旋循环时间长开销大、只能保证一个共享变量的原子操作。CAS会调用JNI:Java Native Interface(JAVA本地调用),允许java调用其他...原创 2018-08-01 11:21:26 · 627 阅读 · 0 评论 -
高并发(1)之Volatile关键字
volatile修饰的共享变量,就具有了以下两点特性:1.保证了不同线程对该变量操作的内存可见性;--->可见性 2.禁止指令重排序(内存屏障)----->有序性 什么是内存可见性? 在计算机执行程序的过程中,每条指令都是通过计算机cpu进行调度的,而指令执行过程中,势必涉及到读数据、写数据,而数据储存在主存当中,由于CPU执行的速度很快,而向主存读数据、...原创 2018-12-18 15:01:52 · 299 阅读 · 0 评论 -
高并发(3)之Synchronized的实现原理
synchronized实现原理分为两种类型:一种为同步代码块,锁定的当前对象,在java中每个对象都有一个监视器(monitor)(虚拟机规范中用的是管程一词),在这个monitor监视器中有两个monitor enter和monitor exit指令,并且这两个指令一 一对应的。如果有线程进入到monitorenter时,尝试获取monitor的所有权,进行判断monitor的进入数,如果...原创 2019-01-17 18:47:28 · 214 阅读 · 0 评论 -
接口限流之Semaphore
import java.util.concurrent.CountDownLatch;import java.util.concurrent.Semaphore;public class LimitStreamWithSemaphore { //API限流 保证FIFO private static Semaphore apiSemphore=new Semaphor...原创 2019-01-24 16:14:37 · 286 阅读 · 0 评论 -
JDK1.8 ConcurrentHashMap源码分析
ConcurrentHashMap重要的属性,无论是初始化哈希表,还是扩容 rehash 的过程,都是需要依赖这个关键属性 private transient volatile int sizeCtl;负数代表正在进行初始化或扩容操作-1代表正在初始化-N 表示有N-1个线程正在进行扩容操作正数或0代表hash表还没有被初始化,这个数值表示初始化或下一次进行扩容的大小。首先分析...原创 2019-01-14 18:57:27 · 334 阅读 · 0 评论 -
Java对象的对象头、偏向锁、轻量级锁、重量级锁
HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Object Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头(Object Header) JVM的对象头包括二/三部分信息:1、Mark Word;2、 类型指针;3、数组长度(只有数组对象才有) 1、Mark Word用于存储对象自身的运行时数据, 如哈希码(Ha...原创 2019-02-13 12:02:44 · 2565 阅读 · 2 评论