【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高并发三种锁的比较
