Java内存模型主要分为工作内存和主内存,变量主要存储在主内存中,每一个线程都有自己的工作内存,对对主内存中的变量读取赋值操作都必须在工作内存中进行,而不能直接读写主内存中的变量。
主内存和工作内存间的交互主要有lock,unlock,read,load,use,asign,store,write8种操作,每种操作必须具有原子性,可见性,有序性。
为了提高程序执行性能,编译器和处理器常会对指令进行重排,主要有编译器优化重排顺序,处理器指令级并行重排,内存系统重排顺序。
同步机制中用到的关键字主要有volatile,synchronized和final。volatile会打破指令重排,让代码顺序执行,使用volatile修饰的变量对其他线程有可见性,但不能保证原子性。synchronized是对共享变量加锁,对于多线程共享多个变量时需要考虑死锁的情况,对变量加锁需要保证加锁顺序的一致性。final修饰的变量线程安全。
网友评论