并发编程回顾:synchronized与Lock
上面程序中,让read方法持有锁1s,且只进行读操作打印data值,write方法持有锁的时间稍短一些0.1s,同时进行写操作给data赋值。
进行读写操作:
此处启动3个线程,一个循环写入data随机数,另外2个线程循环读取data值。
class RWDictionary { private final Map<String, Data> m = new TreeMap<String, Data>(); private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock r = rwl.readLock(); private final Lock w = rwl.writeLock(); public Data get(String key) { r.lock(); try { return m.get(key); } finally { r.unlock(); } } public String[] allKeys() { r.lock(); try { return m.keySet().toArray(); } finally { r.unlock(); } } public Data put(String key, Data value) { w.lock(); try { return m.put(key, value); } finally { w.unlock(); } } public void clear() { w.lock(); try { m.clear(); } finally { w.unlock(); } }}使用读锁get数据和获取key,使用写锁put数据和清除map。注意要unlock。
?