赞
踩
一.synchronized的缺陷
二.java.util.concurrent.locks包下常用的类
三.锁的相关概念介绍
2)Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用;而Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象,就是当程序出现异常的时候是不会释放锁的,只有自己手动释放,所以把释放锁的步骤放在finally 中
- Lock lock = new ReentrantLock();
- public void output(String name){
- int len = name.length();
- lock.lock();
- try{
- for(int i=0;i<len;i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }finally{
- lock.unlock();
- }
- }
读写锁(写锁在读锁之中)
- public class CacheDemo {
- private Map<String, Object> cache = new HashMap<String, Object>();
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- }
- private ReadWriteLock rwl = new ReentrantReadWriteLock();
- public Object getData(String key){
- rwl.readLock().lock();
- Object value = null;
- try{
- value = cache.get(key);
- if(value == null){
- rwl.readLock().unlock();
- rwl.writeLock().lock();
- try{
- if(value==null){
- value = "aaaa";//实际失去queryDB();
- }
- }finally{
- rwl.writeLock().unlock();
- }
- rwl.readLock().lock();
- }
- }finally{
- rwl.readLock().unlock();
- }
- return value;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。