added ReentrantLock