Java中synchronized 关键字的使用
时间: 2024-04-05 10:08:17 浏览: 69
JAVA面试题 简谈你对synchronized关键字的理解
synchronized 关键字是 Java 中的一个关键字,用于实现并发编程中的同步。它可以用于方法、代码块和静态方法上。
1. 用法一:修饰实例方法
当一个线程访问一个对象的 synchronized 实例方法时,其他线程不能访问该对象的其他 synchronized 实例方法,但可以访问该对象的非 synchronized 实例方法。这种方式的锁是当前实例对象。
示例代码:
```java
public synchronized void syncMethod() {
// synchronized 代码块
}
```
2. 用法二:修饰代码块
synchronized 代码块可以用来同步访问共享资源,它必须接收一个对象作为参数,该对象被称为锁对象。当线程进入 synchronized 代码块时,它必须获得锁对象的锁,其他线程在此时无法获得锁对象的锁,只有等待锁被释放。
示例代码:
```java
public void syncBlock() {
synchronized(this) {
// synchronized 代码块
}
}
```
3. 用法三:修饰静态方法
当一个线程访问一个类的 synchronized 静态方法时,其他线程不能访问该类的其他 synchronized 静态方法,但可以访问该类的非 synchronized 静态方法。这种方式的锁是当前类的 Class 对象。
示例代码:
```java
public static synchronized void syncStaticMethod() {
// synchronized 代码块
}
```
需要注意的是,使用 synchronized 关键字会降低程序的性能,因为当一个线程获得锁时,其他线程必须等待该线程释放锁才能继续执行,这会增加线程的上下文切换和调度开销。因此,在进行并发编程时,应该尽量避免使用 synchronized 关键字,而是使用更高级别的同步机制,如 Lock、Semaphore、CountDownLatch 等。
阅读全文