JVM本地锁

# synchronized锁

我们可以通过最简单的synchronized锁来解决并发问题

public synchronized void deduct() {
        stock.setStock(stock.getStock() - 1);
        System.out.println("库存剩余量:" + stock.getStock());
    }
1
2
3
4

进行压力测试,打印结果:

库存剩余量:8
库存剩余量:7
库存剩余量:6
库存剩余量:5
库存剩余量:4
库存剩余量:3
库存剩余量:2
库存剩余量:1
库存剩余量:0
1
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

通过压力测试可知,该方法也能解决并发问题。