同步方法和同步代码块都是Java中用于实现线程同步的机制,它们的主要区别在于使用方式和适用场景:
1. 同步方法:
定义:同步方法是指被`synchronized`关键字修饰的方法。当一个线程访问同步方法时,它会自动获得该方法所属对象的监视器锁。
使用:只需在方法声明前加上`synchronized`关键字即可。
锁对象:默认情况下,同步方法是针对当前对象实例进行同步的,即`this`关键字所指向的对象。
适用场景:适用于方法内部锁的粒度较小,且方法内部逻辑简单的情况。
2. 同步代码块:
定义:同步代码块是指被`synchronized`关键字修饰的代码块。当一个线程访问同步代码块时,它会自动获得指定对象的监视器锁。
使用:需要在代码块前加上`synchronized`关键字,并指定一个锁对象。
锁对象:可以指定任意对象作为锁,也可以使用`this`或`Class`对象。
适用场景:适用于需要同步的代码块较大,或者需要针对不同对象进行同步的情况。
以下是同步方法和同步代码块的一个简单示例:
```java
public class SyncExample {
// 同步方法
public synchronized void syncMethod() {
// 同步代码块内的代码