001package com.hammurapi.store.local;
002
003import java.util.concurrent.atomic.AtomicInteger;
004import java.util.concurrent.locks.Lock;
005
006import com.hammurapi.store.AbstractTrackingLock;
007
008/**
009 * This class tracks number of locks acquired by current thread.
010 * @author Pavel Vlasov
011 *
012 */
013public class LocalTrackingLock extends AbstractTrackingLock {
014        
015        public LocalTrackingLock(Lock master) {
016                super(master);
017        }
018
019        private ThreadLocal<AtomicInteger> counter = new ThreadLocal<AtomicInteger>() {
020                protected AtomicInteger initialValue() {
021                        return new AtomicInteger();
022                }
023        };
024
025        @Override
026        protected void incCounter() {
027                counter.get().incrementAndGet();                
028        }
029
030        @Override
031        protected void decCounter() {
032                counter.get().decrementAndGet();
033        }
034
035        @Override
036        protected int getCounter() {
037                return counter.get().get();
038        }
039
040}