Java常用并发工具类

发布时间 2023-11-30 15:26:16作者: kiper

同步工具类存在的意义

管程或者信号量可以解决所有的并发问题,那么同步工具类存在的意义是什么呢?
两个字:方便。
针对不同的并发场景,使用对应的工具类可以快速完成业务开发。

1. ReadWriteLock

1.1 使用场景

  • 允许多个线程同时读共享变量

  • 只允许一个线程写共享变量

  • 如果一个写线程正在执行写操作,此时禁止读线程读共享变量

1.2 例子

class Cache<K, V> {
    private final ReadWriteLock lock = new ReentrantReadWriteLock();
    private final Lock writeLock = lock.writeLock();
    private final Lock readLock = lock.readLock();
    private final Map<K, V> cache = new HashMap<>();

    public void put(K key, V val) {
        writeLock.lock();
        try {
            cache.put(key, val);
        } finally {
            writeLock.unlock();
        }
    }

    public V get(K key) {
        readLock.lock();
        try {
            return cache.get(key);
        } finally {
            readLock.unlock();
        }
    }
}

1.3 锁的降级与升级