-
重排序可能发生的一种情况查看全部
-
指令重排序: 重排序:代码书写的顺序与实际执行的顺序不同,指令重排序是编译器或处理器为了提高程序性能而做的优化. 1.编译器优化的重排序(编译器优化) 2.指令级并行重排序(处理器优化) 3.内存系统的重排序(处理器优化)查看全部
-
线程执行同步语句块或同步方法的步骤: 1.获取互斥锁 2.清空线程工作内存 3.从主内存拷贝变量的最新副本到工作内存 4.执行代码 5.将更改后的共享变量的值刷新到主内存 6.释放互斥锁查看全部
-
synchronized 能够实现操作的原子性(同步) 内存可见性 JMM中关于synchronized的两条规定: 1.线程解锁前,即退出同步区域前,必须把共享变量的最新值刷新到主内存中.此时主内存中的共享变量值是最新的. 2.线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时,线程需要从主内存中重新读取最新的值.查看全部
-
在程序中会有一个主内存保存程序中的所有变量,每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中该变量的一份拷贝) 线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写. 不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量的传递需要通过主内存来完成. 若线程1对共享变量的修改要想被线程2及时看到,必须经过两个步骤: 1.把工作内存1中更新过的共享变量刷新到主内存中. (此时主内存中保存了共享变量最新的值) 2.将主内存中最新的共享变量的值更新到工作内存2中. 此时线程1对共享变量值的修改,能够及时被线程2看到,实现了共享变量在线程1和线程2之间的可见性.查看全部
-
Java内存可见性 可见性:一个线程对共享变量值的修改,能够及时被其他线程看到. 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是几个线程的共享变量. synchronized、volatile关键字都可以实现线程可见性. Java内存模型中描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节. 这些规则细节都是针对共享变量来定义的.查看全部
-
long和double的读写操作查看全部
-
问题?查看全部
-
synchronized和volatile比较查看全部
-
使用ReentrantLock来保证原子性操作查看全部
-
线程读写volatile变量的操作查看全部
-
synchronized解决不可见性查看全部
-
导致共享变量在多线程不可见的原因查看全部
-
asifserial查看全部
-
过程2查看全部
举报
0/150
提交
取消