Короче говоря: да, это возможно.
Если другой поток уже получил блокировку, то ваш поток будет вынужден ждать, пока она освободится.
Помните, что у вас нет возможности узнать, как два или более одновременно выполняющихся потока чередуют выполнение своих команд. Предположим, два потока, A и B, выполняют этот код. Если поток A находит условие истинным, возможно, что он получает прерванный (снимается с ЦП планировщиком ОС) перед фактическим установлением блокировки (то есть между оценкой условия while и вызовом lock()
), поэтому поток B также находит условие true, принимает блокировку, а поток A. остается в ожидании.