-
JMM查看全部
-
可见性查看全部
-
synchronized和volatile的比较: 1. volatile不需要加锁,比synchronized更轻量级,不会阻塞线程; 2. 从内存可见性角度讲,volatile读相当于加锁,volatile写相当于解锁; 3. synchronized既能保证可见性,又能保证原子性,而volatile只能保证可见性,无法保证原子性。查看全部
-
http://img1.sycdn.imooc.com//555de71600012df412000530-120-68.jpg查看全部
-
共享变量在线程间不可见的原因 1.线程的交叉执行 2.重排序结合线程交叉执行 3.共享变量更新后的值没有在工作内存与主内存间及时更新 synchronized解决上面问题方案: 1、原子性 2、原子性 3、可见性查看全部
-
synchronized实现可见性: 1.线程解锁前(离开synchronized代码时),必须把共享变量的最新值刷新到主内存中; 2.线程加锁时(进入synchronized代码时),将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值(注意:加锁与解锁需要同一把锁)查看全部
-
两条规定:1、线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写。2、不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成查看全部
-
可见性:一个线程对共享变量值的修改,能够及时的被其他线程看打查看全部
-
as-if-serial 必须按照代码顺序执行查看全部
-
共享变量安全使用过程查看全部
-
VolatileDemo运行,怎么都不是500.查看全部
-
大多数时候都不可能同时满足这两个要求的查看全部
-
volatile 通过加入内存屏障和禁止重排序优化来实现可见性 不能保证原子性查看全部
-
volatile实现内存可见性: 通过加入内存屏障和禁止重排序优化来实现的。 1.对volatile变量执行写操作时,会在写操作后加入一条store屏障指令; 2.对volatile变量执行读操作时,会在读操作前加入一条load屏障指令;查看全部
-
保证操作的原子性的方法: 1.使用synchronized关键字--可保证锁内代码的原子性; 2.使用ReentrantLock(java.util.concurrent.locks); 3.使用AtomicInterger(java.util.concurrent.atomic);查看全部
举报
0/150
提交
取消