美文网首页
第一周 理解:Java中的synchronized关键字

第一周 理解:Java中的synchronized关键字

作者: 学石油的程序猿 | 来源:发表于2017-12-10 22:24 被阅读0次

理解:Java中的synchronized关键字.

指标:理解synchronized的含义、明确synchronized关键字修饰普通方法、 静态方法和代码块时锁对象的差异.

有如下一个类A

 class A{
   public synchronized  void a(){}
 public synchronized  void b(){}
}

两个对象
A a1 = new A();
A a2 = new A();

Thread1 Thread2
a1.a(); a2.a();

请问二者能否构成线程同步?

如果A的定义是这样的呢?

  class A{
      public static synchronized  void a(){}
      public static synchronized  void b(){}
  }

synchronized 修饰对象为以下3种:

  1. 修饰普通方法,一个对象中加锁的方法只允许是一个线程访问的.这种情况锁的是访问该方法的实例对象,如果是多个线程不同的对象访问该方法,则无法保证同步.
  2. 修饰静态方法,静态方法是类方法,所以这种情况下锁的是包含这个方法的类,也就是类对象,这种情况下,多个线程的不同对象也是可以保证同步的
  3. 修饰代码块,如果是synchronized (obj),这个同步效果等同于修饰普通方法, 如果是synchronized (obj.class)同步效果等同于修饰静态方法.

问题1:不能同步
问题2:能同步

相关文章

网友评论

      本文标题:第一周 理解:Java中的synchronized关键字

      本文链接:https://www.haomeiwen.com/subject/uvqbixtx.html