java多线程---读写锁的应用

来源:互联网 发布:宁波软件外包 编辑:程序博客网 时间:2024/06/05 15:29

1.概述:为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。
2.构建一个缓存示例:

public class CacheReadWriteLock {    private Map<String, Object> map = new HashMap<String, Object>();    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();    public static void main(String[] args) {        CacheReadWriteLock cacheReadWriteLock = new CacheReadWriteLock();        for (int i = 0; i < 3; i++) {            new Thread(new Runnable() {                @Override                public void run() {                    System.out.println(cacheReadWriteLock.getData("my"));                }            }).start();        }    }    public Object getData(String key) {        readWriteLock.readLock().lock();        Object value = null;        try {            value = map.get(key);            if (value == null) {                readWriteLock.readLock().unlock();                readWriteLock.writeLock().lock();                try {                    if ((value = map.get(key)) == null) {                        value = "aaaa";// 查询db或耗时操作                        map.put(key, value);                        System.out.println("readWriteLocking");                    }                } finally {                    readWriteLock.writeLock().unlock();                    readWriteLock.readLock().lock();                }            }        } finally {            readWriteLock.readLock().unlock();        }        return value;    }}

3.注意: 在同一线程中,持有读锁后,不能直接调用写锁的lock方法 ,否则会造成死锁。

原创粉丝点击