java.util.concurrent.locks
Interface ReadWriteLock
-
所有已知实现类:
读:可以多个线程读
写:只有一个线程写
线程操作资源类
ReentrantReadWriteLock 可重入锁 读写锁
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockTest {
public static void main(String[] args) {
Data7 data7 = new Data7(); //线程操作资源类
for (int i = 0; i <10 ; i++) {
new Thread(()->{
data7.write();
},String.valueOf(i)).start();
}
for (int i = 0; i <10 ; i++) {
new Thread(()->{
data7.read();
},String.valueOf(i)).start();
}
}
}
class Data7{
private volatile Map mp=new HashMap();
ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
public void write(){
ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();
writeLock.lock();
try {
TimeUnit.SECONDS.sleep(2);
System.out.println("----正在写入。 。 。。。-----");
}catch (Exception e){
}finally {
writeLock.unlock();
}
}
public void read(){
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();
readLock.lock();
try {
TimeUnit.SECONDS.sleep(2);
System.out.println("正在读取》》》》》》》");
}catch (Exception e){
}finally {
readLock.unlock();
}
}
}
独占锁(写锁)
共享锁(读锁)
读-读 :可以共存
读-写 :不能共存
写-写:不能共存