【java】读写锁 ReadWriteLock 实现
原理
特别注意
读写锁是可以降级的,就是加了读/写锁的功能里面是可以再次加读锁的;反之则不可以,就是读/写锁的功能模块里面,若是锁没有释放,是不可以加写锁的,必须释放之后才能加写锁。
示例代码
public class ReadWriteLockDemo { private static final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private static int n = 0; public static void main(String[] args) { for (int i = 0; i < 10; i++) { int finalI = i; new Thread(() -> writeLock(finalI)).start(); new Thread(() -> readLock(finalI)).start(); } } private static void readLock(int finalI) { ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock(); readLock.lock(); try { System.out.println(MessageFormat.format("readLock {0} {1}", finalI, n)); } catch (Exception ex) { ex.printStackTrace(); } finally { readLock.unlock(); } } private static void writeLock(int finalI) { ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock(); writeLock.lock(); try { n += 1; System.out.println(MessageFormat.format("writeLock {0} {1}", finalI, n)); Thread.sleep(1000); } catch (Exception ex) { ex.printStackTrace(); } finally { writeLock.unlock(); } } }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
【详解】Java高并发三种锁的比较