Правильно получить ваш замок и затем отпустить его в блоке finally. Я бы получил блокировку до того, как запустится блок try, но он, вероятно, ничего не повредит, если не будет получено исключение при попытке получить блокировку.
Для того, что вы на самом деле пытаетесь сделать, вам нужно переосмыслить, какова ваша цель. В зависимости от того, является ли производительность проблемой, вы можете посмотреть на ReaderWriterLock
. Если конкуренция низкая, рассмотрите возможность блокировки каждой операции, но с использованием спин-блокировки - что чрезвычайно дешево для операций, которые не имеют тенденцию перекрываться, но могут.
Также: Я думаю, вам нужно вернуться к понятию обновления коллекции без блокировки, если только вы не можете гарантировать, что только один поток будет обновлять коллекцию.