读写锁
public class TestReadWriteLock {
public static void main ( String[ ] args) {
ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo ( ) ;
for ( int i = 0 ; i < 16 ; i++ ) {
int finalI = i;
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
readWriteLockDemo. getNum ( finalI) ;
}
} , String. valueOf ( i) ) . start ( ) ;
}
for ( int i = 0 ; i < 6 ; i++ ) {
int finalI = i;
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
readWriteLockDemo. setNum ( finalI) ;
}
} , String. valueOf ( i) ) . start ( ) ;
}
}
}
class ReadWriteLockDemo {
private volatile Map< String, Object> map = new HashMap < > ( ) ;
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock ( ) ;
public void getNum ( int i) {
try {
readWriteLock. readLock ( ) . lock ( ) ;
System. out. println ( Thread. currentThread ( ) . getName ( ) + "获取map" ) ;
Object o = map. get ( String. valueOf ( i) ) ;
System. out. println ( Thread. currentThread ( ) . getName ( ) + "获取成功" ) ;
} finally {
readWriteLock. readLock ( ) . unlock ( ) ;
}
}
public void setNum ( int num) {
try {
readWriteLock. writeLock ( ) . lock ( ) ;
System. out. println ( Thread. currentThread ( ) . getName ( ) + "写入map:" + num) ;
map. put ( String. valueOf ( num) , num) ;
System. out. println ( Thread. currentThread ( ) . getName ( ) + "写如成功" ) ;
} finally {
readWriteLock. writeLock ( ) . unlock ( ) ;
}
}
}