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

2017-12-10  本文已影响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:能同步

上一篇 下一篇

猜你喜欢

热点阅读