"any object held by a weak reference will be garbage collected. Any object held by a soft reference will only be collected if the alternative choice is to throw an out of memory exception"
"Synchronize only in your public interface, if possible. Acquiring an already owned lock is an inexpensive operation, but it's more expensive than not having to do anything"