加在同步代码块上,锁是Synchonized括号里配置的对象,可以是实例对象,也可以是Class对象;
时间: 2024-09-12 12:03:38 浏览: 37
python实例化对象的具体方法
在Java中,`synchronized`关键字用于实现线程同步,它主要用于控制对共享资源的访问,防止多线程同时修改导致数据不一致。当你在一个同步代码块上添加`synchronized`时,通常会指定一个特定的对象作为锁定目标,这个对象被称为监视器(monitor)。
有两种情况可以指定锁:
1. **实例锁**:当锁是某个对象(如`this`关键字,表示当前对象自身)时,只有持有该对象监视器的线程才能进入同步代码块。这种方式称为"实例级同步",适用于单例模式、并发集合等场景。
```java
public class MyClass {
private int count;
public synchronized void increment() {
count++;
}
}
```
2. **静态锁**:当锁是一个类的Class对象时,所有该类的实例共享这个锁。这意味着无论创建了多少个类的实例,同一时间只有一个实例能执行同步代码。这常用于线程池、工具类等全局状态管理。
```java
public class StaticLockExample {
private static Object lock = new Object();
public static synchronized void method() {
// 同步代码
}
}
```
在Java中,使用`synchronized`时要注意避免死锁和过度同步的问题。
阅读全文