JUC(8)JMM】的更多相关文章

文章目录 1.JMM 2.volatile 3.单例模式 1.JMM Volatile是java虚拟机提供轻量级的同步机制 1.保证可见性 2.不保证原子性 3.禁止指令重排 什么是JMM java内存模型,不存在的东西,概念.约定 1.线程解锁前,必须把共享变量立刻刷回主存(线程将主存中的变量复制一份到线程中) 2.线程加锁前,必须读取主存中的最新值到工作内存中 3.加锁和读锁是同一把锁 两个线程同时执行,假如一个线程修改变量.另外一个线程没有及时得到,就会出错. 内存交互操作 内存交互操作有…
说到JMM大家一定很陌生,被我们所熟知的一定是jvm虚拟机,而我们今天讲的JMM和JVM虚拟机没有半毛钱关系,千万不要把JMM的任何事情联想到JVM,把JMM当做一个完全新的事物去理解和认识. 我们先看一下计算机的理论模型,也是冯诺依曼计算机模型,先来张图. 其实我们更关注与计算机的内部CPU的计算和内存之间的关系.我们在来深入的看一下是如何计算的. 我们来看一下这个玩意的处理流程啊,当我们的数据和方法加载的内存区,需要处理时,内存将数据和方法传递到CPU的L3->L2->L1然后再进入到CP…
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面把线程相关的生命周期.关键字.线程池(ThreadPool).ThreadLocal.CAS.锁和AQS都讲完了,现在就剩下怎么来用多线程了.而要想用好多线程,其实是可以取一些巧的,比如JUC(好多面试官喜欢问的JUC,就是现在要讲的JUC).JUC就是java.util.concurrent的首字母缩写,它是Java并发工具包就是中提供的各种工具类的统称,主要分为几大类: 1.同步器: 2.线程安全的容器: 3.阻塞队列: 4.一些特…
貌似两个多月没写博客,不知道年前这段时间都去忙了什么. 好久以前写过一次和volatile相关的博客,感觉没写的那么深入吧,这次我们继续说我们的volatile关键字. 复习: 先来简单的复习一遍以前写过的东西,上次我们说了内存一致性协议M(修改)E(独占)S(共享)I(失效)四种状态,还有我们并发编程的三大特性原子性.一致性和可见性.再就是简单的提到了我们的volatile关键字,他可以保证我们的可见性,也就是说被volatile关键字修饰的变量如果产生了变化,可以马上刷到主存当中去.我们接下…
1.线程和进程 进程:一个程序,微信.qq...程序的集合.(一个进程包含多个线程,至少包含一个线程.java默认有两个线程:主线程(main).垃圾回收线程(GC) 线程:runnable.thread .callable java开不了线程,在源码中可以看出,调用的是底层的方法 private native void start0(); 2.并发和并行 并发:交替 并行:同时(同一个时间) 并发编程的本质:充分利用cpu的资源 3.线程的状态 看源码 public enum State {…
一.什么是JMM 概念:Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范. 图示: 解析:首先我们要明确一点:内存模型主要是影响线程共享的内存可见性问题,Java线程之间的通信由Java内存模型[JMM]控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见. 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系: 线程之间的共享变量存…
什么是JMM JMM就是Java内存模型.目的是为了屏蔽系统和硬件的差异,让同一代码在不同平台下能够达到相同的访问结果.规定了线程和内存之间的关系. 内存划分 JMM规定了内存主要划分为主内存和工作内存. 如果Java线程都去操作主内存,对性能的影响就很大,如果每个线程都具有自己的工作内存,然后再将工作内存与主内存进行同步,就能提高性能. 这也会带来很多副作用,就是线程对内存的可见性问题,线程安全的问题. JMM与JVM区别 不用Java虚拟机的内存区域划分,是两种逻辑的存在,是不同层次的划分结…
文章目录 1.CAS 2.原子引用解决ABA问题,版本号.修改后,可以看到 1.CAS package com.cas; import java.util.concurrent.atomic.AtomicInteger; /** * CAS compareAndSet:比较并交换 */ public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicIn…
文章目录 1.四大函数式接口(必须掌握) 1.1 function 1.2 Predicate 1.3 Consumer 1.4 Supplier 1.四大函数式接口(必须掌握) 1.lambda表达式 2.函数式接口 3.链式编程 4.stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterface public interface Runnable { public abstract void run(); } 超级多的FunctionalInterface 简…
1.读写锁ReadWriteLock package com.readlock; import java.util.HashMap; import java.util.Map; /** * ReadWriteLock */ public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache(); for (int i = 0; i < 5; i++) { f…