private int i = 1;
@Test
public void readWriteLock(){
ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
for (int j = 0; j < 100; j++) {
// 如果有一个线程加了读锁,别的线程是可以随意同时加读锁的,因为只是有线程在读数据而已,此时别的线程也是可以来读数据的!
// 同理,如果一个线程加了读锁,此时其他线程是不可以加写锁的,因为既然有人在读数据,那就不能让你来随意来写数据了!
new Thread(() -> {
lock.readLock().lock();
try {
System.out.println("读中。。");
System.out.println("content:" + i);
System.out.println("读结束。。。");
} finally {
lock.readLock().unlock();
}
}).start();
//如果有一个线程加了写锁,那么其他线程就不能加写锁了,同一时间只能允许一个线程加写锁,因为加了写锁就意味着有人要写一个共享数据,那同时就不能让其他人来写这个数据了。
//同时如果有线程加了写锁,其他线程就不能加读锁了,因为既然都有人在写数据了,你其他人当然不能来读数据了!
new Thread(() -> {
lock.writeLock().lock();
try {
System.out.println("写中。。");
System.out.println("content ++i:" + ++i);
System.out.println("写结束。。。");
} finally {
lock.writeLock().unlock();
}
}).start();
}
}