Я реализует замок блокировки файла в Java, и при попытке получить блокировку у меня есть блок кода что-то вроде этого:Thread.sleep или выход при опросе в Java
while(!fileLockIsAcquired())
{
Thread.sleep(100); //is this cool?
tryAcquireFileLock();
}
Это значение 100 миллисекунды кажутся слишком жесткими для меня, и мне интересно, не планировал ли планировщик быть более умным, если бы использовал Thread.sleep(0)
или Thread.yield()
. Похоже, мне кажется, что я лучше сообщаю намерения, но я не уверен, что полностью понимаю, как это интерпретируется JVM. Является ли один вариант лучше, чем другой?
Файл является удаленным файлом, доступ к которому осуществляется через веб-сервис, который не имеет метода блокировки блокировки, поэтому я должен реализовать блокировку самостоятельно.
Почему бы не просто заблокировать? Вы не справляетесь с чем-либо полезным путем блокировки спина. – EJP
'yield' не имеет полезной семантики; он имел смысл в дни перед Java 1.3, когда на некоторых платформах JVM по-прежнему использовал зеленые потоки. –
@EJP это на самом деле блокировка файла с несколькими процессами. Я отредактировал вопрос, чтобы уточнить. – MikeFHay