01 synchronized和volatial关键字理解

vvEcho 2024-01-20 14:08:36
Categories: Tags:

synchronized 关键字可以用来修饰的方法,类,代码块会被加锁,他能保证线程的互斥性;所谓互斥性就是线程1加了锁后,线程2就会被阻塞直到线程1释放锁;
synchronized 能够及时的刷新内存,保证了内存的可见性。 具体工作过程如下:

在JMM中,每个线程都有自己独立的工作内存,即一组寄存器/cache高速缓冲区;在CPU和内存交互的时候,会先把内存中内容拷贝到工作内存,操作完之后在写回内存,这个过程非常容易出现数据不一致的情况,在编译器开启优化时特别严重
volatile 关键字用来修饰共享变量,保证共享变量的可见性,底层是在共享变量的两边增加内存屏障,禁止了指令重排;