(转)Java中synchronized关键字锁定的内容

  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

 

猜你喜欢

转载自cainiao1923.iteye.com/blog/2357333