JVM выполняет изящный трюк под названием lock elision , чтобы избежать затрат на блокировку объектов, которые виден только одному потоку.
Здесь хорошее описание уловки:
http://www.ibm.com/developerworks/java/library/j-jtp10185/
Делает ли .Net CLR что-то похожее? Если нет, то почему бы и нет?