本文主要说明读写锁 及其相关 内容
锁的类型
- 悲观锁:
- 它认为 它在操作数据的时候 其他人都会改动数据 所有直接加锁
- 关系型数据库 : mysql oracle
- 乐观锁:
- 它认为 它在操作数据的时候 其他人都不会改动数据 只有在提交的时候 (通过版本号来 更新数据的版本)
- 非关系型数据库:redis
- 行锁:
- 范围小 容易发生死锁
- 表锁:
- 范围大
- 读锁:
- 共享锁
- 写锁:
- 排他锁(对象锁)
- 读写锁( JUC 并发工具类中提供的 ReentrantReadWriteLock )
- 等线程写完之后,才能另一个线程写入数据
- ReentrantReadWriteLock 类中有 两个静态内部类
- public static class ReadLock implements Lock, java.io.Serializable
- public static class WriteLock implements Lock, java.io.Serializable
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 /**
* The lock returned by method {@link ReentrantReadWriteLock#readLock}.
*/
public static class ReadLock implements Lock, java.io.Serializable {
private static final long serialVersionUID = -5992448646407690164L;
private final Sync sync;
...
}
/**
* The lock returned by method {@link ReentrantReadWriteLock#writeLock}.
*/
public static class WriteLock implements Lock, java.io.Serializable {
private static final long serialVersionUID = -4992448646407690164L;
private final Sync sync;
...
}
读写锁使用Demo
1 | // 缓存。。。。资源类 |
1 | public class ReadWriteLockDemo { |