读写锁 ReentrantReadWriteLock
2017-08-10 09:36
330 查看
读操作的时候 所有的线程可以一起执行. 上读锁,其他线程只能读不能写
写操作的时候 会锁定一个线程. 上写锁,不允许其他线程读也不允许写
import java.util.HashMap;
import java.util.List;
public class LockMap<K, V> extends ILock
{
private HashMap<K, V> map = new HashMap<K, V>();
public HashMap<K, V> getMap()
{
HashMap<K, V> map = new HashMap<K, V>();
ReadLock().lock();
try
{
map.putAll(map);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return map;
}
public List<K> getKeys()
{
ReadLock().lock();
try
{
return new ArrayList<K>(map.keySet());
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return null;
}
public List<V> getValues()
{
ReadLock().lock();
try
{
return new ArrayList<V>(map.values());
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return null;
}
public V get(K key)
{
ReadLock().lock();
try
{
if(map.containsKey(key))
{
return map.get(key);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return null;
}
public int size()
{
ReadLock().lock();
try
{
return map.size();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return 0;
}
public void clear()
{
WriteLock().lock();
try
{
map.clear();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
WriteLock().unlock();
}
}
public void put(K key, V value)
{
WriteLock().lock();
try
{
map.put(key, value);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
WriteLock().unlock();
}
}
public void remove(K key)
{
WriteLock().lock();
try
{
if(map.containsKey(key))
{
map.remove(key);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
WriteLock().unlock();
}
}
}
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public abstract class ILock
{
private ReadWriteLock meadWriteLock = new ReentrantReadWriteLock();
protected final Lock ReadLock()
{
return meadWriteLock.readLock();
}
protected final Lock WriteLock()
{
return meadWriteLock.writeLock();
}
}
写操作的时候 会锁定一个线程. 上写锁,不允许其他线程读也不允许写
自定义的map
import java.util.ArrayList;import java.util.HashMap;
import java.util.List;
public class LockMap<K, V> extends ILock
{
private HashMap<K, V> map = new HashMap<K, V>();
public HashMap<K, V> getMap()
{
HashMap<K, V> map = new HashMap<K, V>();
ReadLock().lock();
try
{
map.putAll(map);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return map;
}
public List<K> getKeys()
{
ReadLock().lock();
try
{
return new ArrayList<K>(map.keySet());
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return null;
}
public List<V> getValues()
{
ReadLock().lock();
try
{
return new ArrayList<V>(map.values());
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return null;
}
public V get(K key)
{
ReadLock().lock();
try
{
if(map.containsKey(key))
{
return map.get(key);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return null;
}
public int size()
{
ReadLock().lock();
try
{
return map.size();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
ReadLock().unlock();
}
return 0;
}
public void clear()
{
WriteLock().lock();
try
{
map.clear();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
WriteLock().unlock();
}
}
public void put(K key, V value)
{
WriteLock().lock();
try
{
map.put(key, value);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
WriteLock().unlock();
}
}
public void remove(K key)
{
WriteLock().lock();
try
{
if(map.containsKey(key))
{
map.remove(key);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
WriteLock().unlock();
}
}
}
ILock
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public abstract class ILock
{
private ReadWriteLock meadWriteLock = new ReentrantReadWriteLock();
protected final Lock ReadLock()
{
return meadWriteLock.readLock();
}
protected final Lock WriteLock()
{
return meadWriteLock.writeLock();
}
}
相关文章推荐
- Java ReentrantLock和ReentrantReadWriteLock
- Java Concurrency - ReadWriteLock & ReentrantReadWriteLock
- ReentrantReadWriteLock重入锁中的读写锁在公平和非公平模式下的资源抢占测验
- ReentrantReadWriteLock读写锁的使用
- 同步中的四种锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
- ReentrantReadWriteLock
- JAVA多线程之——读写锁 ReentrantReadWriteLock
- 【死磕Java并发】-----J.U.C之读写锁:ReentrantReadWriteLock
- Android并发编程之如何使用ReentrantReadWriteLock替代synchronized来提高程序的效率
- java多线程学习之ReentrantReadWriteLock(一)
- Java中的锁——ReentrantReadWriteLock(读写锁)
- JUC之ReentrantReadWriteLock(JDK1.8源码)
- Java concurrency之共享锁和ReentrantReadWriteLock_动力节点Java学院整理
- Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock(转)
- java ReentrantReadWriteLock
- ReentrantReadWriteLock
- ReentrantReadWriteLock的使用
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
- ReentrantReadWriteLock读写锁的使用
- ReentrantReadWriteLock 读写锁获取与释放源码解析