Java
文章平均质量分 52
无名小卒一枚
因为你们都太优秀了,这就是我持续努力的动力
展开
-
线程间互相调度-Java
功能模拟线程A的A方法调用线程B的B方法,线程B的B方法调用线程A的A方法package CSNOTES;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import java.lang.Thread.*;import static java.lang.Thread.inter原创 2021-08-16 15:03:50 · 203 阅读 · 0 评论 -
JMM (Java内存模型)
JMM (Java内存模型)JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式.JMM关于同步规定:1.线程解锁前,必须把共享变量的值刷新回主内存2.线程加锁前,必须读取主内存的最新值到自己的工作内存3.加锁解锁是同一把锁JMM要求可见性 由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些原创 2021-05-13 17:02:47 · 124 阅读 · 0 评论 -
Volatile-3.禁止指令重排
volatile禁止指令重排JMM要求有序性计算机在执行程序时,为了提高性能,编译器和处理器常常会做指令重排,一把分为以下3种单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致.(单线程不用关心指令重排)处理器在进行重新排序是必须要考虑指令之间的数据依赖性多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程使用的变量能否保持一致性是无法确定的,结果无法预测源码写的顺序不见得和编译的指令顺序一样例子1比如源码如下public void mySort(){ int x原创 2021-05-13 17:01:41 · 550 阅读 · 0 评论 -
Volatile-2.不保证原子性
(1)代码理解变量使用了volatile关键字package automitic;public class Mydata { volatile int num=0; public void addto60(){ this.num=60; } public void addplusplus(){ num++; }}开启20个前程执行1000次num++package automitic;//验证volatil原创 2021-05-13 11:01:01 · 69 阅读 · 0 评论 -
Volatile-1.保证可见性
禁止指令重排1.1.JMM (Java内存模型)之可见性JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式.JMM关于同步规定:1.线程解锁前,必须把共享变量的值刷新回主内存2.线程加锁前,必须读取主内存的最新值到自己的工作内存3.加锁解锁是同一把锁 由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为...原创 2021-05-13 09:09:38 · 90 阅读 · 0 评论