Ответ @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
});
Не прямой ответ, но поскольку единственный способ получить много повторных входов в блоки synchronized
на одном и том же мониторе (или даже на разных мониторах) - это рекурсивные вызовы методов (вы не можете программно заблокировать его в например, тугой цикл) вам не хватит места в стеке вызовов, прежде чем вы достигнете предела счетчика, который JVM хранит для этого внутри.
Почему поток поддерживает только 2 147 483 647 - это то, что мне сейчас тоже интересно знать!
blockquote>Ну, во-первых, этого достаточно ... Но этого будет достаточно быть реализован со счетчиком повторного входа, и эти вещи в конечном итоге переполняются.