![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
托尼吴
退役大厂架构师
展开
-
锁升级过程
对象布局 在 hotspot 虚拟机中,对象在内存中布局可以被分为三部分:对象头/实例数据/补位数据。下面一张图是一个普通 java 对象和一个数组对象的结构组成:Java 对象大小计算首先,对象头大小的确定在32位系统中,存放 Class 的指针空间大小为 4 字节,MarkWord 为 4 字节,即对象头为 8 字节 在64 位系统中,存放 Class 指针的空间大小为 8 字节, MarkWord 为 8 字节,即对象头大小为 8 字节 64 位系统下,如果开启了指...原创 2020-08-13 20:21:33 · 342 阅读 · 0 评论 -
偏向锁、轻量级锁、重量级锁的升级以及区别
锁的状态:无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级。要注意的是,这四种状态都不是Java语言中的锁,而是Jvm为了提高锁的获取与释放效率而做的优化(使用synchronized时)。首先通过一个小例子来解释一下三种锁的区别:偏向锁一个线程操资源,此时没有其他线程会竞争,这是偏向锁,大多数情况下,锁不存在多线程竞争,而是总是由同一线程多次获得时,为了使线程获得锁的代价更低而引入了偏向锁、..原创 2020-08-13 12:24:55 · 561 阅读 · 0 评论 -
深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对ThreadLocal的理解 二.深入解析ThreadLocal类 三.Threa...转载 2019-03-13 14:51:22 · 118 阅读 · 0 评论 -
并发编程基础(第一讲)-----synchronized 使用理解
线程安全的概念:当多个线程访问某个类(对象或者方法)时,这个类始终都能表现出正确的行为,那么这个类就是线程安全synchronized:可以在任意对象以及方法上加锁,而加锁的这段代码称为互斥去或者临界区package mythread;/** * 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。...原创 2019-05-11 22:19:27 · 122 阅读 · 0 评论 -
并发编程基础(第二讲)-----原子性和同步类容器的理解
package sync007;public class RunThread extends Thread{ //如果没有volatile 虽然isRunning改为false但是线程还是没有停止 private volatile boolean isRunning = true; private void setRunning(boolean isRunning){ t...原创 2019-05-12 22:46:25 · 265 阅读 · 0 评论 -
并发编程基础(第 四讲)---------线程池的使用
Executor框架package test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * * * GOOK LUCK * * * * @Author by wukainian, * @Date on 2019/5...原创 2019-05-17 11:29:06 · 241 阅读 · 0 评论 -
并发编程基础(第三讲)--------多线程设计模式
package design014;public interface Data { String getRequest();}package design014;public class RealData implements Data{ private String result ; public RealData (String que...原创 2019-05-17 11:29:40 · 230 阅读 · 0 评论 -
并发编程基础(第六讲)----------concurrent包下锁的使用
重入锁package lock020;import java.util.concurrent.locks.ReentrantLock;/** * lock.getHoldCount()方法:只能在当前调用线程内部使用,不能再其他线程中使用 * 那么我可以在m1方法里去调用m2方法,同时m1方法和m2方法都持有lock锁定即可 测试结果holdC...原创 2019-05-17 20:17:51 · 340 阅读 · 0 评论