自己实现的java lock
在做一个ajax web推送功能的时候碰到一个问题。 如果多个用户同时访问List,或者Map中的同一条数据的时候,如果对数据进行插入或者排序,就会出现并发问题。为了避免这个问题查阅了 java.util.concurrent 里面的一些类。发现没有将锁对象公开的实现类。 所以自己就尝试写一个!
实现代码
Lock 接口实现
LinkedQueue<Message> queue = new LinkedQueue<Message>();try{queue.fullyLock();//对队列排序或者插入排序的时候 锁定 takeLock 和 putLock}finally{queue.fullyUnlock();}
基本思路:如果一个线程获得锁,其他线程再获取该锁时,会挂起该线程,并将线程放入一个等待队列。待线程锁释放的时候再去检查等待队列,出队。并激活线程