synchronized的括号里的是什么
时间: 2024-09-16 15:01:26 浏览: 52
`synchronized`关键字后面通常跟着一个括号,括号里的内容可以是一个对象、this关键字或者是当前线程。这是用来确定锁的范围以及锁定机制的关键部分:
- **对象锁**:如果传递一个具体的对象作为参数,那么只有拥有这个对象实例的监视器锁的线程才能进入同步代码块。这意味着整个代码块对于所有持有该对象的其他线程来说都是不可见的。
```java
synchronized (obj) {
// 对象 obj 的代码块
}
```
- **this关键字锁**:如果使用`this`,则锁定的是当前对象实例,适用于成员变量共享的情况,确保对它们的修改是线程安全的。
```java
public class MyClass {
private Object lock = new Object();
synchronized (this) {
// 当前对象的代码块
}
}
```
- **当前线程锁**:当没有提供参数时,`synchronized`作用于当前的Thread对象,这被称为隐式监视器锁。这种方式下,所有来自同一个线程的同步代码块都会互斥执行。
```java
synchronized (null) { // 等价于 synchronized (Thread.currentThread()) {
// 当前线程的代码块
}
```
总之,括号中的内容决定了锁定的对象,进而控制了哪些线程能够同时执行同步代码块内的代码。
阅读全文