synchronized关键字可以加到哪些地方,请每个地方写出代码示例
时间: 2024-04-09 15:33:50 浏览: 83
synchronized关键字可以应用于不同的地方,包括方法、代码块和静态方法。下面是每个地方的代码示例:
1. 同步方法:
```java
public synchronized void synchronizedMethod() {
// 在方法体内部对共享资源进行操作
}
```
在上述示例中,使用synchronized关键字修饰了一个方法,使其成为同步方法。当线程调用该方法时,会获取该对象的锁,其他线程想要调用该方法时会被阻塞,直到获取到锁。
2. 同步代码块:
```java
public void synchronizedBlock() {
synchronized (this) {
// 在代码块内部对共享资源进行操作
}
}
```
在上述示例中,使用synchronized关键字修饰了一个代码块。在括号内指定了一个对象作为锁,当线程进入该代码块时会尝试获取该对象的锁,其他线程想要进入同步代码块时会被阻塞,直到获取到锁。
3. 静态方法同步:
```java
public static synchronized void synchronizedStaticMethod() {
// 在静态方法内部对共享资源进行操作
}
```
在上述示例中,使用synchronized关键字修饰了一个静态方法。当多个线程同时调用该静态方法时,它们会相互竞争获取类级别的锁,只有一个线程能够获得锁并执行该方法,其他线程需要等待锁释放才能执行。
需要注意的是,同步方法和同步代码块都是以对象为单位进行同步的。当多个线程访问同一个对象的同步方法或同步代码块时,它们会相互竞争获取对象的锁。若多个线程访问不同对象的同步方法或同步代码块,则它们不会相互影响,因为获取的是不同对象的锁。
阅读全文