import java.util.LinkedList; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * @desc 读写锁的案例 说明1: 若某个线程获取了写锁进行数据写操作,那么此时其他线程对共享资源的读写操作都 会被阻塞直到锁被释放; 说明2: 若某个线程获取了读锁进行数据读操作,那么此时其他线程对共享资源的写操作会进入 阻塞直到锁被释放,但如果是其他线程对共享资源进行读操作则不会被阻塞; **/ public class ReadWriteLockExample { private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); // 创建读锁 private final Lock readLock = readWriteLock.readLock(); // 创建写锁 private final Lock writeLock = readWriteLock.writeLock(); // 共享数据 private final LinkedList<String> list = new LinkedList<>(); // 使用写锁进行数据同步 public void add(String element) { writeLock.lock(); try { list.addLast(element); }finally { writeLock.unlock(); } } // 使用写锁进行数据同步 public void take() { writeLock.lock(); try { list.removeFirst(); }finally { writeLock.unlock(); } } // 使用读锁进行数据同步 public String get(int index) { readLock.lock(); try { return list.get(index); }finally { readLock.unlock(); } } }
读写锁--ReadWriteLock
最新推荐文章于 2023-03-16 00:57:44 发布