synchronized关键字能锁定什么?通常我们锁定的是一个对象或者是一个代码块。其实synchronized还能锁定一些其他内容。
同步分为 同步方法 和 同步块 两种方式。
变量分为 实例变量(不带static的变量) 和 类变量(带static的变量)。
同步锁锁定的内容是什么?
无论你将Synchronized加在方法【非static,static的后面还会说】前还是加在一个变量【非static,static的后面还会说】前,其锁定的都是一个对象。 每一个对象都只有一个锁与之相关联。
上面两种写法是一样的,都是锁定实例对象。
下面的写法都是锁定类对象。在下面的例子中是锁定的Demo3这个类。
【当锁定static变量的时候,由于static变量只有一份拷贝,所以此时锁定的也是类对象】
在这种情况下,如果有一个线程thread 访问了这4个方法中的任何一个, 在同一时间内其它的线程都不能访问这4个方法。
总结一下:
synchronized可以修饰方法,可以修饰变量,方法和变量都可以是静态的【类方法类变量】,或者是非静态【实例方法实例变量】的。
-------------------------------------------------------------
一个线程执行临界区代码过程如下:
1 获得同步锁
2 清空工作内存
3 从主存拷贝变量副本到工作内存
4 对这些变量计算
5 将变量从工作内存写回到主存
6 释放锁
REFS:http://blog.csdn.net/imzoer/article/details/8054151