java中的Synchronized有2个作用
1. 互斥访问
2. 保证内存可见性
关于第二点,总是有点疑惑,看了很多资料,一般这么描述,
1. 在同一个锁上修改,读取共享变量,读线程总是可以获取最新变量值。
2. 后面又有 这样的描述: 线程释放锁时会将强制刷新工作内存中的脏数据到主内存中,获取一个锁将强制线程装载(或重新装载)字段的值.
这里有个链接 http://ifeve.com/syn-jmm-visibility/
这样我也有点困惑,以前没仔细想清楚,特地写了以下代码,希望高手可以解惑。
假设有3个线程,线程1先调用set方法,然后线程2调用get方法,线程3调用get2方法
则可以肯定线程2可以看到线程1修改的num值,
线程3是否肯定可以看到最新值呢?
波斯汪
SMILET