The Container (FastIteratingContainer and MapContainer) could be protected properly by AbstractHashbelt.lock(). Because we can't access the Container directly, we just access the Container through AbstractHashbelt, so the AbstractHashbelt.lock() will protect the Container. So I think the synchronized/locking on the Container (FastIteratingContainer and MapContainer) is not necessary.
But the AbstractHashbelt.lock() can't protect WeakReferenceContainer properly, because WeakReferenceContainer.get need to get the writeLock, this has different meaning with AbstractHashbelt.lock(). So synchronized/locking on WeakReferenceContainer is necessary.