Synchronized原理
时间: 2024-06-13 08:07:21 浏览: 150
Synchronized是Java中的一种同步机制,它可以保证在同一时刻最多只有一个线程执行某个方法或代码块,从而避免了多线程的数据竞争和冲突。其原理如下:
1. Synchronized是基于对象锁实现的,每个对象都有一个锁(也称为监视器),当一个线程访问该对象时,它会尝试获取这个对象的锁。
2. 如果这个锁没有被其他线程占用,则该线程获取到锁并继续执行;如果这个锁已经被其他线程占用,则该线程会被阻塞,直到获取到锁为止。
3. 当一个线程执行完Synchronized代码块后,会释放该对象的锁,其他线程才能获取到该锁并执行Synchronized代码块。
4. Synchronized还支持可重入性,即同一个线程可以多次获取同一个对象的锁,而不会被阻塞。
5. Synchronized还支持非公平性,即线程获取锁的顺序是不确定的,不一定是按照线程启动的顺序来获取锁。
下面是一个简单的Synchronized示例:
```java
public class SynchronizedDemo {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized void decrement() {
count--;
}
public synchronized int getCount() {
return count;
}
}
```
在上面的示例中,increment()、decrement()和getCount()方法都是Synchronized方法,它们都是基于对象锁实现的,可以保证在同一时刻最多只有一个线程执行这些方法。
阅读全文