synchronized 锁不住普通对象
时间: 2023-08-25 19:13:08 浏览: 101
实际上,synchronized 是可以锁住普通对象的。当我们使用 synchronized 关键字修饰一个代码块或方法时,它会获取对象的锁来实现线程的同步。
当多个线程对同一个普通对象进行 synchronized 操作时,只有一个线程能够获得该对象的锁,其他线程需要等待锁的释放。在获得锁的线程执行完同步代码块或方法后,会释放锁,其他线程才有机会获得锁并执行相应的同步操作。
例如,我们可以创建一个普通对象,并在多个线程中使用 synchronized 来进行互斥访问:
```java
class MyObject {
public synchronized void myMethod() {
// 互斥操作
}
}
MyObject obj = new MyObject();
// 在多个线程中调用对象的同步方法
Thread t1 = new Thread(() -> {
obj.myMethod();
});
Thread t2 = new Thread(() -> {
obj.myMethod();
});
t1.start();
t2.start();
```
在上述例子中,通过 synchronized 关键字修饰的 myMethod() 方法,确保了在同一时刻只有一个线程能够执行其中的互斥操作。其他线程需要等待锁的释放,才能继续执行。
需要注意的是,synchronized 锁住的是对象本身,而不是代码块或方法。因此,不同的对象实例之间是独立的,它们的锁是相互独立的。只有同一个对象的不同线程之间才会互斥访问。
阅读全文