JVM本地锁
早睡蛋
# synchronized锁
我们可以通过最简单的synchronized锁来解决并发问题
public synchronized void deduct() {
stock.setStock(stock.getStock() - 1);
System.out.println("库存剩余量:" + stock.getStock());
}
1
2
3
4
2
3
4
进行压力测试,打印结果:
库存剩余量:8
库存剩余量:7
库存剩余量:6
库存剩余量:5
库存剩余量:4
库存剩余量:3
库存剩余量:2
库存剩余量:1
库存剩余量:0
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
说明加上synchronized可以解决基本的并发问题。
# ReentrantLock锁
除了synchronized的方式,我们还可以通过ReentrantLock的方式进行获取锁与释放锁。
private Stock stock = new Stock();
private ReentrantLock lock = new ReentrantLock();
public void deduct() {
lock.lock();
try {
stock.setStock(stock.getStock() - 1);
System.out.println("库存剩余量:" + stock.getStock());
} finally {
lock.unlock();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
通过压力测试可知,该方法也能解决并发问题。