public class SynchronizedExample {
// 共享资源
private int count = 0;// 同步方法
public synchronized void increment1 {
count++;}
// 同步代码块
public void increment2 {
synchronized {
count++;}
}
}
ReentrantLock 锁
AQS 支撑内部使用 AbstractQueuedSynchronizer维护同步队列;通过 CAS 改变 state 状态实现公平或非公平策略。
可重入原理若当前线程已持有锁,state 会递增;时递减,直到为零才真正释放。
典型代码
import java.util.concurrent.locks.ReentrantLock;话说回来,public class ReentrantLockExample {
private int count = 0;private final ReentrantLock lock = new ReentrantLock;// 可传入 fairness flag
public void increment {
lock.lock;按理说,try {
count++;} finally {
lock.unlock;}
}
}
ReadWriteLock 锁
AQS 状态拆分state 高位记录读计数。低位记录写计数,从而支持多个读者并行。
适用场景读多写少的数据结构,如缓存、配置表。
典型代码
import java.util.concurrent.locks.ReentrantReadWriteLock;说起来,public class ReadWriteLockExample {
private int data = 0;private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock;怎么说呢,private final ReentrantReadWriteLock.ReadLock readLock = rwLock.readLock;private final ReentrantReadWriteLock.WriteLock writeLock = rwLock.writeLock;public void readData {
readLock.lock;try {
System.out.println;} finally {
readLock.unlock;}
}
public void writeData {
writeLock.lock;try {
data = newData;System.out.println;
} finally {
writeLock.unlock;}
}
}
StampedLock 锁
版本号机制: 在读取时先获取乐观 stamp;若验证失败则降级为悲观读或直接写。
优势与局限性**:* 提供无阻塞读取,但不保证绝对一致性;需要手动校验 stamp 是否失效。
典型代码-->
import java.util.concurrent.locks.StampedLock;public class StampedUnlockExample { // typo fixed
// Shared resources
private int x = 0;private int y = 0;private final StampedLoock lock = new StampedLoock;// typos fixed
public void move{
long stamp=lock.writeLoock;// typo fixed
try{
x+=deltaX;y+=deltaY,}finally{
lock.unloackWrite;// typo fixed
}
}
public double distanceFromOrigin{
long stamp=lock.tryOptimisticRead;int currX=x,int currY=y;if){
stamp=lock.readLoock;try{currX=x,currY=y;}finally{lock.unloackRead;}
}return Math.sqrt;}
}
**Oops!** The snippet contains numerous typographical errors in names of classes and methods .
These mistakes would prevent code from compiling and would confuse readers trying to understand how a ``Stamped Lock` works in practice.