Синхронизированный блок имеет максимальный предел повторного входа?

Ответ @aaronheckmann работал для меня, но мне пришлось заменить return doc.tags.length; на return doc.tags != null;, потому что это поле содержит null, если оно не совпадает с условиями, записанными внутри заполнения. Итак, окончательный код:

query....
.exec(function(err, docs){
   docs = docs.filter(function(doc){
     return doc.tags != null;
   })
   // do stuff with docs
});

6
задан Jason 27 February 2019 в 05:13
поделиться

1 ответ

Не прямой ответ, но поскольку единственный способ получить много повторных входов в блоки synchronized на одном и том же мониторе (или даже на разных мониторах) - это рекурсивные вызовы методов (вы не можете программно заблокировать его в например, тугой цикл) вам не хватит места в стеке вызовов, прежде чем вы достигнете предела счетчика, который JVM хранит для этого внутри.

Почему поток поддерживает только 2 147 483 647 - это то, что мне сейчас тоже интересно знать!

Ну, во-первых, этого достаточно ... Но этого будет достаточно быть реализован со счетчиком повторного входа, и эти вещи в конечном итоге переполняются.

0
ответ дан Thilo 27 February 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: