TDPL describes how synchronized automatically peels off the "shared" off of direct members of the object. Unfortunately that feature is not yet implemented.
This would help a ton. I'm still not super happy about having to label an entire method as synchronized for this to work though. I'd prefer to label it shared and synchronize only the part(s) inside that need to hold the lock.