java中synchronized的用法

synchronized的用法大致分为3类

  1. synchronized修饰实例方法
    例如synchronized void a(){}
  2. synchronized修饰类方法
    例如synchronized static void a(){}
  3. synchronized修饰任意对象
    例如synchronized(new Object()){}

其实第一二种情况可以归为第三种情况,修饰实例方法就相当与当前的类的实例对象作为监视器,而修饰类方法相当于将当前的这个类作为监视器。
synchronized void a(){}等同于synchronized (this){}
synchronized static void a(){}等同于synchronized (this.getClass()){}
(唯一的区别就是右边的要放在一个方法里面运行)

所以我们只需要研究第三种情况就行了。
总而言之一句话:修饰同一个对象的的所有线程同步执行,修饰不同对象的所有线程异步执行。
即使有100个线程修饰的都是同一个对象,这些线程中被修饰的代码也只能一个接一个执行,不能并发。这个对象就是锁。

posted @ 2020-01-06 00:50  开局一把刀  阅读(6)  评论(0)    收藏  举报