随笔分类 -  高并发和多线程

07 锁的原理
摘要:锁的原理 java对象结构 java对象包括对象头和实例数据,其中对象头12B,其中4B是对齐位 对象头(12B) 包含mark word 和 klass pointer mark word 包含了锁信息,hashcode,gc信息(64bit,8B) klass pointer 指定对象的元数据的 阅读全文
posted @ 2019-10-11 11:33 YL10000 阅读(167) 评论(0) 推荐(0)
06 CAS的原理和AQS
摘要:CAS的原理 CAS(compareAndSwap),比较交换,是一种无锁的原子算法。 Cas(value,expect,newValue),如果vaule和ecpect一样,就更新为newValue,否则什么也不做,返回false 实现原理 通过调用unsafe.compareAndSwapInt 阅读全文
posted @ 2019-10-11 11:32 YL10000 阅读(204) 评论(0) 推荐(0)
04 volatile关键字实现原理
摘要:volatile关键字实现原理 1、volatile关键字的语义分析 作用:让其他线程能够马上感知到某个线程多某个变量的修改 保证可见性 对共享变量的修改,其他线程能够马上感知到 保证有序性 在重排序时保证volatile修饰的代码位置不变 实现原理 对于volatile修饰的变量会编译时会使用Lo 阅读全文
posted @ 2019-10-11 11:31 YL10000 阅读(105) 评论(0) 推荐(0)
05 单例模式
摘要:单例模式 1、饿汉式 在加载的时候已经被实例化,只有一次,线程安全 但如果一直不使用,占用资源 2、 懒汉式 2.1 synchronized实现懒汉式 由于使用了synchronized时代码退化为串行执行 2.2 使用DCL(double checked locking)实现懒汉式 在构造方法中 阅读全文
posted @ 2019-10-11 11:31 YL10000 阅读(121) 评论(0) 推荐(0)
03 synchronized
摘要:synchronized 1、 锁机制的特性 互斥性:在同一时间只允许一个线程持有某个对象锁(原子性) 可见性:必须确保在锁被释放之前,对共享变量所在的修改,对于随后获得该锁的另一个线程是可见的 2、synchronized的使用 2.1 锁的分类 对象锁:synchronized(this|obj 阅读全文
posted @ 2019-10-11 11:31 YL10000 阅读(128) 评论(0) 推荐(0)
02 java内存模型
摘要:java内存模型 1、JVM内存区域 方法区:类信息、常量、static、JIT (信息共享) java堆:实例对象 GC (信息共享) OOM VM stack:JAVA方法在运行的内存模型 (OOM) PC: java线程的私有数据,这个数据就是执行下一条指令的地址 Native method 阅读全文
posted @ 2019-10-11 11:29 YL10000 阅读(148) 评论(0) 推荐(0)
01 多线程核心原理
摘要:多线程核心原理 1. 多线程的作用 充分利用CPU资源,提高执行效率 CPU底层使用的是:总线锁和缓存锁(缓存一致性协议) 2. 多线程带来的问题 可见性问题 解决方法 volatile修饰全局变量(hsdis插件查看运行时的汇编指令) 原理:使用lock指令 把当前处理器缓存行的数据写入到系统内存 阅读全文
posted @ 2019-10-11 11:28 YL10000 阅读(187) 评论(0) 推荐(0)
多线程的使用02
摘要:1 synchronized 1.1 同步方法获取的锁都是对象锁,而不是把一段代码和方法当作锁(等同于在方法中添加同步代码块synchronized(this){}) 那个线程先执行带有synchronized的方法,那个线程就拥有该方法所属对象的锁,其他线程只能等待。 前提:多个线程访问同一个对象 阅读全文
posted @ 2017-11-22 18:50 YL10000 阅读(214) 评论(0) 推荐(0)
多线程的使用01
摘要:1 为什么使用多线程 1.1 发挥多核cpu的优势 单核CPU上的多线程是假的多线程,同一时间处理器只会处理一段逻辑,只是在多个线程之间进行快速切换 多核CPU才能实现真正的多线程,同时处理多个逻辑,充分利用CPU 1.2 防止阻塞 单核CPU不仅不能发挥多线程的优势,反而因为多个线程的切换,反而降 阅读全文
posted @ 2017-11-21 18:14 YL10000 阅读(217) 评论(0) 推荐(0)