Java中synchronized关键字锁定的内容

   synchronized关键字能锁定什么?通常我们锁定的是一个对象或者是一个代码块。其实synchronized还能锁定一些其他内容。
      同步分为 同步方法 和 同步块 两种方式。
      变量分为 实例变量(不带static的变量) 和 类变量(带static的变量)。
      同步锁锁定的内容是什么?
      无论你将Synchronized加在方法【非static,static的后面还会说】前还是加在一个变量【非static,static的后面还会说】前,其锁定的都是一个实例对象。 每一个对象都只有一个锁与之相关联。

      上面两种写法是一样的,都是锁定实例对象。
      下面的写法都是锁定类对象。在例子中是锁定的Demo3这个类。
     【当锁定static变量的时候,由于static变量只有一份拷贝,所以此时锁定的也是类对象】

      在这种情况下,如果有一个线程thread 访问了这4个方法中的任何一个, 在同一时间内其它的线程都不能访问这4个方法。
      总结一下:
      synchronized可以修饰方法,可以修饰变量,方法和变量都可以是静态的【类方法类变量】,或者是非静态【实例方法实例变量】的。
=================><===================
      一个线程执行临界区代码过程如下:
      1 获得同步锁
      2 清空工作内存
      3 从主存拷贝变量副本到工作内存
      4 对这些变量计算
      5 将变量从工作内存写回到主存
      6 释放锁


你可能感兴趣的:(Java中synchronized关键字锁定的内容)