avoid unnecessary synchronized block