class MyResource { private volatile boolean FLAG = true; //默认开启,进行生产+消费 private AtomicInteger atomicInteger = new AtomicInteger(); BlockingQueue<Strin ...
分类:
编程语言 时间:
2020-01-06 00:36:19
阅读次数:
108
单线程happen-before原则: 在同一个线程中,书写在前面的操作happen-before后面的操作。 锁的happen-before原则: 同一个锁的unlock操作happen-before此锁的lock操作。 volatile的happen-before原则: 对一个volatile变 ...
分类:
移动开发 时间:
2020-01-05 11:55:48
阅读次数:
85
volatile 1.volatile作用 volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确... ...
分类:
编程语言 时间:
2020-01-05 00:41:38
阅读次数:
122
首先简单介绍一下编译器对代码优化的概念:编译器优化:在不影响程序结果的情况下,改变程序的执行顺序提高效率优化级别有:O0O1O2O3优先级别越高,优化的越厉害如何优化?在此介绍volatile,我们只谈优化的一个方式,就是将频繁使用的变量直接加载到离cpu很近的寄存器中。我们先来看如下代码:#include<stdio.h>#include<stdlib.h>#includ
分类:
其他好文 时间:
2020-01-05 00:39:27
阅读次数:
118
并发:多个线程访问同一份资源。 并行:一边听歌一边写论文就是并行,同时做事。 volatile是java虚拟机提供的轻量级的同步机制。 voliatile有三大特性: 1.保证可见性。 2.不保证原子性。 3.禁止指令重排。 JMM(Java内存模型 Java Memory Model)本身是一种抽 ...
分类:
其他好文 时间:
2020-01-04 12:39:44
阅读次数:
56
1. static_cast 只支持相关类型的转换,比较安全,比如short与int,double与int,void* 与 int*, float*等 特点:编译期间转换 2. const_case 去掉表达式的 const 修饰或 volatile 修饰,将 const/volatile 类型转换 ...
分类:
编程语言 时间:
2020-01-02 11:55:35
阅读次数:
77
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性,用volatile保持值的可见性和操作顺序性; 如果仅仅是计算操作,我们自然就想到了java.util.concurrent.atomic包下的原子类,则不必考虑锁的升级、获取、 ...
分类:
其他好文 时间:
2020-01-01 16:28:19
阅读次数:
161
AtomicInteger原子操作类型: private static Integer num = 0; 对num++得到结果19055 private static volatile Integer num = 0; 对num++得到结果19550 此时引入java并发包下的AtomicInteg ...
分类:
其他好文 时间:
2020-01-01 11:49:40
阅读次数:
89
JVM,并发,锁相关: 1.请你谈谈对volatile的理解,volatile是否存在伪共享问题。 2.cas你知道吗? 3.原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗? 4.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁。 5.CountDown ...
分类:
编程语言 时间:
2019-12-31 18:57:50
阅读次数:
86
一、Java内存区域 从《深入理解Java虚拟机》一书中知道 1. 程序计数器 当前线程的行号指示器,JVM多线程的方式,导致了线程在被挂起到重新获取执行权时,需要知道上次挂起的地方在哪。在JVM中, 通过程序计数器来记录字节码的执行位置。程序计数器具有隔离性,为线程私有。此区域不会发生OOM。 2 ...
分类:
其他好文 时间:
2019-12-31 12:28:46
阅读次数:
68