synchronized加锁原理
时间: 2024-07-22 07:01:09 浏览: 73
java synchronized关键字原理、自定义一把锁来实现同步等
`synchronized`关键字在Java中用于同步代码块或方法,它通过一种称为“监视器”(Monitor)的对象实现加锁机制。当一个线程获取了某个对象的监视器锁后,其他试图访问该对象的线程会进入等待状态,直到当前线程释放锁。以下是`synchronized`工作原理的关键点:
1. **对象锁定**:每个对象都有一个关联的监视器,当一个线程首次访问synchronized代码块或方法时,它会尝试获取该对象的监视器锁。
2. **互斥访问**:一旦获得锁,同一时间只有一个线程可以访问同步代码,其余线程必须等待,这就是互斥性。
3. **公平锁与非公平锁**:Java提供了两种类型的锁——公平锁(默认)和非公平锁。公平锁保证先获取锁的线程优先执行,而非公平锁则不保证顺序,可能会立即给当前请求者。
4. **中断和超时**:持有锁的线程可以被中断,并可以选择在一定时间内自动释放锁。如果超时,尝试获取锁的线程会失败并抛出异常。
5. **锁的传递性**:如果一个线程A获得了对象B的锁,然后又获得了对象C的锁(如果允许),那么线程A同时拥有对B和C的锁,这被称为锁的传递性。
6. **finally块解锁**:无论正常退出还是异常退出synchronized代码块,都会确保锁会被释放。
阅读全文