Thanks a lot Xiao Chen for the comments.
Are the constructors of AutoCloseableReadLock and AutoCloseableWriteLock intentionally public? I'm having a hard time coming up with a scenario of this.
Actually no, I have changed them to package private.
Feels like a StringBuilder would be more readable and efficient in logWarning, than the current 3 concatenation.
For the log warning, these three strings can be concatenated into one after the compiling, this should be fine.
But yes, the StringBuilder is much more efficient than String.format, do we need to use StringBuilder instead of String.format, or it's okay to use String.format as now?
For others, they are good ones, I will fix them in the next patch V4. Thanks!