My amateur implementation of java's ReadWriteLock, ReentrantLock and Condition