高并发
文章平均质量分 90
苏木樨
道路很远,但脚步更长!
展开
-
高并发之深度解析对象与Sync
现在大多数虚拟机都是64位的,本文介绍的也是以64位虚拟机为基础。在主流Java虚拟机HotSpot里面,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding);为什么任何一个对象都可以成为一把锁?因为Java中所有的对象都默认继承了超类Object,而Object在JVM源码(C/C++)层面关联了一个对象ObjectMonitor,所以每个对象“天生”都带着一个对象监视器,也就是每一个被锁住的对象都会和自己的Monitor关原创 2022-11-28 21:04:32 · 426 阅读 · 0 评论 -
高并发之深度解析CAS [理论+案例+源码]
CAS是JDK提供的非阻塞原子性操作,它通过硬件保证了比较-更新的原子性。它是非阻塞的且自身具有原子性,也就是说这玩意儿效率更高且通过硬件保证,说明这玩意更可靠[不是synchronized,不牵扯用户态和内核态的切换,底层是CPU原语]。CAS是一条CPU的原子指令(cmpxchg指令),不会造成所谓的数据不一致问题,Java的Unsafe类提供的CAS方法(如compareAndSwapXXX)底层实现即为CPU指令cmpxchg。执行cmpxchg指令的时候,会判断当前系统是否为多核系统,如果...原创 2022-11-25 22:38:52 · 2057 阅读 · 0 评论 -
高并发之Java内存模型JMM
JMM本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见;CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题。JVM规范中试图定义一种Java内存模型(Java Memory Model,简称JVM)来屏蔽掉各种硬件和操作系统的对内存访问差异,以实现让Java程序在各种平台下都能到达一致的内存访问效果。原创 2022-11-23 07:08:02 · 172 阅读 · 0 评论 -
实现自定义线程池
尝试着自己写一个线程池加深对JDK线程池的理解,从阻塞队列出发,协调任务的产生与线程池消费任务,用ReentrantLock锁技术,对阻塞队列是否已满,为空等情况进行阻塞挂起线程;再设计线程池,围绕任务的执行execute,与队列实现一些拒绝策略等等原创 2022-11-13 15:52:59 · 984 阅读 · 0 评论 -
ThreadPool线程池
本文讲解了一下ThreadPoolExecutor,还有基于它的一些封装方法,以及线程池的一些状态,常见线程池的执行流程原创 2022-11-12 22:50:57 · 416 阅读 · 0 评论