Единственная проблема с не синхронизацией isEmpty()
заключается в том, что вы не знаете, что происходит внизу. Хотя ваши рассуждения вполне разумны, они предполагают, что базовый Stack
также ведет себя разумно. Что, вероятно, и есть в данном случае, но вы не можете полагаться на это в целом.
И вторая часть вашего вопроса, нет ничего плохого в операции блокирования всплывающих окон, см. this для полной реализации всех возможных стратегий.
И еще одно предложение: если вы создаете класс, который может быть повторно использован в нескольких частях приложения (или даже в нескольких приложениях), не используйте методы synchronized
. Сделайте это вместо:
public class Whatever {
private Object lock = new Object();
public void doSomething() {
synchronized( lock ) {
...
}
}
}
Причина этого в том, что вы на самом деле не знаете, хотят ли пользователи вашего класса синхронизироваться с вашими Whatever
экземплярами или нет. Если они это сделают, они могут помешать работе самого класса. Таким образом, вы получите свой собственный личный замок, которому никто не сможет помешать.