JAVA中实现线程安全的三种方式
- 1. 同步代码块
- 2. 同步方法
- 3. ReentrantLock
- 4. 总结
💖The Begin💖点点关注,收藏不迷路💖
|
1. 同步代码块
使用synchronized关键字加在需要同步的代码块上,并指定一个锁对象。这种方式可以精确控制同步的范围,减少不必要的同步开销。
public class Counter {
private int count = 0;
private final Object lock = new Object();
public void add(int value) {
synchronized (lock) {
count += value;
}
}
}
2. 同步方法
将synchronized关键字放在方法声明上,这样整个方法体就会被同步。这种方式简单直观,但可能会降低并发性能。
public class Counter {
private int count = 0;
public synchronized void add(int value) {
count += value;
}
}
3. ReentrantLock
ReentrantLock是一个显式锁,提供了比synchronized更高的灵活性和功能。需要显式地调用lock()和unlock()方法来加锁和释放锁。
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Counter {
private int count = 0;
private final Lock lock = new ReentrantLock();
public void add(int value) {
lock.lock();
try {
count += value;
} finally {
lock.unlock();
}
}
}
4. 总结
选择哪种方式取决于具体需求:
1、对于简单的同步需求,可以使用同步方法。
2、需要更细粒度控制时,使用同步代码块。
3、追求更高灵活性和功能时,选择ReentrantLock。
💖The End💖点点关注,收藏不迷路💖
|