// 使用 synchronized 关键字实现同步锁
public class SynchronizedExample {
private int count = 0;
// synchronized 方法
public synchronized void increment() {
count++;
}
// 获取当前计数值
public synchronized int getCount() {
return count;
}
}
// 使用 Lock 接口实现同步锁
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private int count = 0;
private final Lock lock = new ReentrantLock();
// 使用 Lock 实现同步块
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
// 获取当前计数值
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
}
Synchronized 关键字:
synchronized 是 Java 内置的关键字,用于实现线程同步。它可以修饰方法或代码块。synchronized 方法或代码块时,它会自动获取对象的内置锁(也称为监视器锁),其他线程必须等待该锁被释放才能进入。synchronized 的优点是简单易用,缺点是不够灵活,且无法在不满足条件时提前释放锁。Lock 接口:
Lock 是 Java 并发包中提供的接口,提供了比 synchronized 更加灵活和强大的锁机制。ReentrantLock 是 Lock 接口的一个实现类,支持可重入锁。Lock 需要显式地调用 lock() 和 unlock() 方法来控制锁的获取和释放,这使得代码更加灵活,但也增加了出错的可能性(例如忘记释放锁)。Lock 还提供了更多的功能,如尝试获取锁、定时获取锁等。通过对比可以看出,synchronized 更适合简单的同步需求,而 Lock 则更适合复杂的并发场景。
上一篇:java return
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站