您的位置:首页 > 其它

读写锁 ReentrantReadWriteLock

2017-08-10 09:36 330 查看
读操作的时候 所有的线程可以一起执行. 上读锁,其他线程只能读不能写

写操作的时候 会锁定一个线程.         上写锁,不允许其他线程读也不允许写

自定义的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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息