ReadWriteLock使用

ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。

主要方法

  • readLock() // 获得读取操作的锁
  • writeLock() // 获得写入操作的锁

举个栗子

public class Test3 {
    public static ReadWriteLock lock=new ReentrantReadWriteLock(); 
    private Integer height=0;
    private Integer width=0;


    public String getValue(){
        try{
            lock.readLock().lock();;
            return height+":"+width;
        }finally{
            lock.readLock().unlock();
        }
    }

    public void setValue(){
        try{
            lock.writeLock().lock();
            height++;
            width++;
        }finally{
            lock.writeLock().unlock();
        }
    }


    public static void main(String[] args) {
        final ExecutorService executor=Executors.newFixedThreadPool(10);
        final CountDownLatch latch=new CountDownLatch(100);
        final Test3 test=new Test3();

        for(int i=0;i<100;i++){
            executor.submit(new Runnable() {
                public void run() {
                    try{
                        test.setValue();
                    }finally{
                        latch.countDown();
                    }
                }
            });
        }
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(test.getValue());

    }
}

你可能感兴趣的:(并发编程,一个节点的并发编程笔记)