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 · 239 阅读 · 0 评论 -
JMM (Java内存模型)
JMM (Java内存模型) JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式. JMM关于同步规定: 1.线程解锁前,必须把共享变量的值刷新回主内存 2.线程加锁前,必须读取主内存的最新值到自己的工作内存 3.加锁解锁是同一把锁 JMM要求可见性 由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些原创 2021-05-13 17:02:47 · 137 阅读 · 0 评论 -
Volatile-3.禁止指令重排
volatile禁止指令重排 JMM要求有序性 计算机在执行程序时,为了提高性能,编译器和处理器常常会做指令重排,一把分为以下3种 单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致.(单线程不用关心指令重排) 处理器在进行重新排序是必须要考虑指令之间的数据依赖性 多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程使用的变量能否保持一致性是无法确定的,结果无法预测 源码写的顺序不见得和编译的指令顺序一样 例子1 比如源码如下 public void mySort(){ int x原创 2021-05-13 17:01:41 · 606 阅读 · 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 · 84 阅读 · 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 · 107 阅读 · 0 评论