Acquires the read lock used by all non-mutating public methods of this object. This method also ensures that an IllegalStateException is thrown if the same thread tries to acquire the write lock (by calling one of the mutating methods) while still holding this read lock (to prevent deadlocks).
This method should only be used in very specific circumstances. Avoid if possible.
@see #releaseReadLockSpecial()