随笔分类 -  J2EE之并发编程

摘要:一、AQS模型(volitale + cas + 变体CLH队列) 底层数据结构是双向链表 1.AQS 是基于 volitale 和 CAS 实现的,其中 AQS 中维护一个 valitale 类型的变量 state 来做一个可重入锁的重入次数,加锁和释放锁也是围绕这个变量来进行的。 2.AQS 核 阅读全文
posted @ 2022-08-23 21:02 遇见神龙 阅读(107) 评论(0) 推荐(0) 编辑
摘要:一、锁的状态 JDK1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁。但是在JDK1.6后,JVM为了提高锁的获取与释放效率对synchronized 进行了优化,引入了偏向锁和轻量级锁,从此以后锁的状态就有了四种:无锁、偏向锁、轻量级锁、重量级锁。并且synchron 阅读全文
posted @ 2022-08-23 17:39 遇见神龙 阅读(181) 评论(0) 推荐(0) 编辑
摘要:一、Java 对象模型(对象头、实例数据和对齐填充 jdk1.6 对象在内存中的布局分为三块区域:对象头(Mark Word、元数据指针和数组长度)、实例数据和对齐填充。 实例对象如何存储:对象的实例存储在堆中,对象的元数据存储在元空间区,对象的引用存储在栈中。 1. Java对象头 对象头:Jav 阅读全文
posted @ 2022-08-19 18:20 遇见神龙 阅读(873) 评论(0) 推荐(0) 编辑
摘要:一、ThreadLocal是什么?线程本地变量 数据隔离 1.ThreadLocal用来存放线程本地变量,提供了一种线程安全的方式,用来避免数据共享(线程变量隔离)。 ThreadLocal<T>其实是与线程绑定的一个变量。 ThreadLocal和Synchonized都用于解决多线程并发访问。但 阅读全文
posted @ 2020-04-16 22:25 遇见神龙 阅读(203) 评论(0) 推荐(0) 编辑
摘要:一、CAS机制 1.CAS(Compare-and-Swap),即比较并替换,java并发包中许多Atomic的类的底层原理都是CAS。 2.CAS需要有3个操作数: 1)需要读写的内存值 V 2)进行比较的预期值 A 3)拟写入的新值 B。 CAS指令执行时,当且仅当内存值V与预期值A相等时,将内 阅读全文
posted @ 2020-04-15 22:48 遇见神龙 阅读(1600) 评论(0) 推荐(0) 编辑
摘要:一、高并发优化思路: 1.前端页面:用户点击按钮后置灰,禁止用户重复提交请求。动静分离 2.js层:限制用户在x秒之内只能提交一次请求。 3.服务层:缓存异步处理。消息队列和Redis。限流 阅读全文
posted @ 2020-04-15 21:45 遇见神龙 阅读(179) 评论(0) 推荐(0) 编辑
摘要:一、实现原理 1.插入内存屏障,禁止指令重排序。编译器和处理器(cpu) 2.保证共享变量对所有线程的可见性。 阅读全文
posted @ 2020-04-15 20:09 遇见神龙 阅读(139) 评论(0) 推荐(0) 编辑
摘要:一、秒杀业务分析以及技术难点 1.秒杀业务分析 2.秒杀技术分析 二、悲观锁与乐观锁 1.概念 2. 三、秒杀核心服务实战 四、秒杀系统架构设计 阅读全文
posted @ 2019-09-15 09:47 遇见神龙 阅读(283) 评论(0) 推荐(0) 编辑
摘要:一、基本使用 1.Synchronized的作用。 原子性:确保线程互斥的访问同步代码; 可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行lock操作,则将会清空工作内存中此变量的值,在执行引擎使用此变 阅读全文
posted @ 2019-08-12 16:10 遇见神龙 阅读(297) 评论(0) 推荐(0) 编辑
摘要:一、线程池简介 1.线程池状态 1)Running:运行中 2)ShuttingDown:关闭中 3)Termitnaed:已关闭 2.线程池是进程级的重量级资源。生命周期默认和JVM一致。 3.线程池优缺点 线程复用机制 1)降低系统资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 阅读全文
posted @ 2019-08-10 22:02 遇见神龙 阅读(163) 评论(0) 推荐(0) 编辑
摘要:Java并发的两个关键问题:线程之间的通信和同步。 一、Java线程通信(JMM) 1.两种线程之间的通信机制 1)共享内存:线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。例:Java的并发。 2)消息传递:线程之间没有公共状态,线程之间通过发送消息来显式进行通信。例 阅读全文
posted @ 2019-05-31 17:32 遇见神龙 阅读(327) 评论(0) 推荐(0) 编辑
摘要:一、创建线程的方式 1.继承Thread类,重写该类的run()方法。类 2.实现Runnable接口,并重写该接口的run()方法,该run()方法同样是线程执行体,创建Runnable实现类的实例,并以此实例作为Thread类的target来创建Thread对象,该Thread对象才是真正的线程 阅读全文
posted @ 2019-05-31 16:22 遇见神龙 阅读(177) 评论(0) 推荐(0) 编辑
摘要:一、synchronized关键字:锁对象或类对象。加锁方法具备原子性。 1.synchronized方法和synchronized(this){}块:都是锁当前对象。 2.static synchronized:锁的是当前类的class对象。 3.加锁的目的:保证操作的原子性。 4.同步和非同步方 阅读全文
posted @ 2019-05-19 15:27 遇见神龙 编辑

点击右上角即可分享
微信分享提示