使用 synchronized(this)
和 synchronized(.class)
的区别在于它们锁定的对象不同。
当使用 synchronized(this)
时,锁定的是当前对象实例,即只有一个线程可以访问该对象实例的同步代码块或方法。这意味着如果有多个对象实例,每个对象实例都有自己的同步代码块或方法,可以同时被一个线程访问。
当使用 synchronized(.class)
时,锁定的是类的 Class 对象,即只有一个线程可以访问该类的同步代码块或方法,不管有多少个实例。这意味着无论有多少个对象实例,它们都共享同一个 Class 对象,只有一个线程可以访问该类的同步代码块或方法。
综上所述,synchronized(this)
和 synchronized(.class)
的区别在于它们锁定的对象不同,分别是当前对象实例和类的 Class 对象。