JMM
tom有了cat
积跬步,以至千里
展开
-
Java内存模型学习之锁的内存语义 ReetrantLock的源码分析 Lock释放锁和获取锁的过程(公平锁和非公平锁)
锁的释放和锁的获取: 线程A释放一个锁,实质上是线程A向接下来将要获取这个锁的某个线程发出了(线程A对共享变量所做修改的)消息 线程B获取一个锁,实质上是线程B接收了之前某个线程发出的(在释放这个锁之前对共享变量所做修改的)消息 线程A释放锁,随后线程B获取这个锁,这个过程实质上是通过线程A通过主内存向线程B发送消息 package juc.lock; import java.util...原创 2019-05-13 22:34:07 · 195 阅读 · 0 评论 -
Java内存模型学习之concurrent包的实现
线程通信的四种方式 A线程写volatile变量,随后B线程读取这个volatile变量 A线程写volatile变量,随后线程使用CAS更新这个volatile变量 A线程使用CAS更新一个volatile变量,随后B线程使用CAS更新这个volatile变量 A线程使用CAS更新一个volatile变量,随后B线程读取这个volatile变量。 concurrent包的整体实现实现 ...原创 2019-05-14 16:01:33 · 162 阅读 · 0 评论 -
Java内存模型学习之synchronize同步方法和同步代码块底层原理
对于synchronize同步块的实现底层使用了monitorenter (监视器进入,获取锁)和monitorexit (监视器退出,释放锁)指令 对于同步方法是使用修饰符上的ACC_SYNCHNIZED来完成的,不管使用哪一种,本质是对一个对象的监视器进行获取,同一个时刻只能有一个线程获取到由synchronized保护对象的监视器。 ...原创 2019-05-14 17:59:48 · 862 阅读 · 0 评论 -
Java内存模型JMM学习之上下文切换-多线程一定快吗?
写在前面:本系列博客主要记录自己的学习过程,回顾JMM相关的东西,主要参考《java并发编程的艺术》,这本书粗略的看了两遍,但是里面很多东西很模糊,决定再重新捋一遍,理解了才是自己的。 一个概念 时间片:Cpu分配给各个线程的时间(非常短)。 多线程怎么工作? 就算是单核处理器也支持多线程,cpu通过给每个线程分配时间片来实现这个机制。,cpu通过不断的切换线程执行,由于比较...原创 2019-05-11 11:18:37 · 232 阅读 · 0 评论 -
Java内存模型学习之内存模型结构 线程通信 内存可见,指令重排
两个关键问题 线程间如何通信及线程之间如何同步? 共享内存并发模型:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式的通信。 消息传递的并发模型:线程之间没有公共状态,线程必须通过发送消息来显示进行通信 java并发采用的共享内存模型,整个通信过程完全透明。 java内存模型的抽象结构 所有的实例域,静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。局部...原创 2019-05-11 15:35:23 · 302 阅读 · 1 评论 -
Java内存模型JMM学习之CAS(依赖硬件的CPU原子指令保证原子性)
对于CAS我一点也不陌生,但是感觉也很陌生,很早之前就开始看java并发编程的艺术这本书,里面讲了很多CAS算法的东西,但是对于这个东西就是觉得没理解清楚,谁和谁比较?比较了什么值是我以前学习的一个困惑,今天专门花时间整理了一下。 CAS就是java并发编程里面常用的一个算法,很多JUC的一些原子类就是使用CAS算法保证线程安全,它是类似git的实现一样一种基于乐观...原创 2019-05-11 23:54:16 · 980 阅读 · 0 评论