-
主内存 工作内存 工作内存是主内存的一个备份查看全部
-
共享变量在线程间不可见的原因查看全部
-
as-if-serial语义查看全部
-
指令重排序查看全部
-
线程执行互斥代码的过程查看全部
-
synchronized的两条固定查看全部
-
synchronized的两个主要功能查看全部
-
可见性的实现方式查看全部
-
线程对共享变量的操作只能在自己的工作内存中进行,不能从主内存(JMM)中读写查看全部
-
as-if-serial查看全部
-
Synchronized volatile区别查看全部
-
1.Java语言层面支持的可见性:synchronized和volatile 2.synchronized实现可见性:锁,同步 原子性(同步) 可见性 3.JMM关于synchronized的规定: 线程解锁前,必须把共享变量的最新值刷新到主内存中; 线程加锁时,将清空工作内存中的共享变量的值,使用共享变量时需要从主内存中重新读取最新的值; 注意:加锁与解锁使用的是同一把锁 4.重排序:代码顺序与执行顺序可能不同 5.as-if-serial语义:无论如何重排序,程序执行的结果应该与代码顺序执行的结果一致 Java编译器,运行时和处理器都会保证Java在单线程下遵循as-if-serial语义查看全部
-
synchronized:加锁,性能开销较大,保证可见性,保证原子性 volatile:效率高,不加锁,非阻塞,可见性,不保证原子性,读相当于加锁,写相当于解锁 [ 查看全文 ] 4天前查看全部
-
1.ReentrantLock private Lock lock = new ReentrantLock();//可重入锁 public void increase() { lock.lock();//注意:锁内部的操作需要放到try...finally中执行 try{ this.number++;//number的可见性+number++的原子性 }finally{ lock.unlock();//释放锁资源 }查看全部
-
1.解决volatile变量的原子性: 使用synchronized关键字; ReentrantLock(JDK1.5以上,java.util.concurrent.locks); AtomicInterger(JDK1.5以上,java.util.concurrent.atomic)查看全部
举报
0/150
提交
取消