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

理解: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:能同步

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,688评论 0 11
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,987评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,503评论 1 15
  • 这个年纪,做什么事情都特别的功利,以前在学校读书时喜欢看黑格尔,看王小波,看那些不着调调的闲书,想来也只有大学时才...
    王岩_shang阅读 230评论 0 1