ReadWriteLock
ReadWriteLock维护了一对相关的锁,一个用于只读操作,一个用于写入操作。只要没有writer,读取锁可以由Reader线程同时保持,但写入锁是独占的。 ReadWriteLock读取操作通常不会改变共享资源,但执行写入操作时,必须用独占方式来获取锁。对于读取操作占多数的数据结构。ReadWriteLock能提供比独占锁更高的并发性。而不是对于只读的数据结构,其中包含的不变性可以完全不需要考虑加锁操作。 接口的JDK源码
public interface ReadWriteLock {
Lock readLock ( ) ;
Lock writeLock ( ) ;
}
demo
public class TestReadWriteLock {
public static void main ( String[ ] args) {
ReadWriteLockDemo rw = new ReadWriteLockDemo ( ) ;
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
rw. set ( ( int ) ( Math. random ( ) * 101 ) ) ;
}
} , "write:" ) . start ( ) ;
for ( int i = 0 ; i < 100 ; i ++ ) {
new Thread ( new Runnable ( ) {
@Override
public void run ( ) {
rw. get ( ) ;
}
} ) . start ( ) ;
}
}
}
class ReadWriteLockDemo {
private int number = 0 ;
private ReadWriteLock lock = new ReentrantReadWriteLock ( ) ;
public void get ( ) {
lock. readLock ( ) . lock ( ) ;
try {
System. out. println ( Thread. currentThread ( ) . getName ( ) + " : " + number) ;
} finally {
lock. readLock ( ) . unlock ( ) ;
}
}
public void set ( int number) {
lock. writeLock ( ) . lock ( ) ;
try {
System. out. println ( Thread. currentThread ( ) . getName ( ) ) ;
this . number = number;
} finally {
lock. writeLock ( ) . unlock ( ) ;
}
}
}