Поток безопасен каким образом? Я не вижу здесь никакой части, которую вы могли бы защитить.
Пропустить может сбросить doSkip
в любое время, поэтому нет смысла его блокировать. У вас нет ресурсов, к которым можно получить доступ одновременно - поэтому ИМХО в этом коде ничего не может быть повреждено / небезопасно.
Единственная часть, которая может работать по-разному в зависимости от блокировки / подсчета, - это сколько "пропусков" вы ожидаете при каждом вызове .skip()
. Если вы хотите убедиться, что каждый пропуск приводит к пропущенному вызову .work()
, вы должны изменить doSkip
на счетчик, который защищен блокировкой как приращения, так и сравнения / уменьшения. В настоящее время один поток может включить doSkip
после проверки, но до сброса doSkip
. В данном примере это не имеет значения, но в реальной ситуации (с большим количеством кода) это может иметь значение.