synchronized修饰不同地方的不同效果
1、修饰代码块:大括号括起来的代码,作用于调用的对象。
2、修饰方法:整个方法,作用于调用的对象。
3、修饰静态方法:整个静态方法,作用于所有对象。
4、修饰类:括号括起来的部分,作用于所有对象。
可见性---synchronized
JMM关于synchronized的两条规定:
1、线程解锁前,必须把共享变量的最新值刷新到主内存
2、线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值(注意,加锁与解锁是通一把锁)