Изглежда, че вашите db заявки се изпълняват от нишката на потребителския интерфейс, въпреки че казвате, че насрочена задача изпълнява заявките (?). За да сте сигурни, можете да разпечатате стекова проследяване, където имате достъп до базата данни:
new Exception().printStacktrace();
Към предложеното от вас решение:изглежда като приличен дизайн, ако вашите db заявки са бавни и в противен случай биха замразили вашия потребителски интерфейс. Можете да внедрите система за събития между слоя на потребителския си интерфейс и слоя db, може би прост подход, базиран на опашка.
РЕДАКТИРАНЕ:
Има най-вероятни примери, за да намерите как да приложите решение, базирано на събития.
Отказ от отговорност:Не съм правил никакво истинско програмиране на потребителски интерфейс от много години.
- Потребителят щраква върху бутон в потребителския интерфейс. Нишката на потребителския интерфейс поставя обект на събитие (DataWantedEvent) на опашка (java.util.Queue), променя етикет („Изчакване на данни...“) и след това продължава и изчаква други взаимодействия на потребителите.
- Нишката на слоя db приема събитието от опашката и прави заявки към базата данни. Резултатът се публикува обратно на друга опашка в резултатен обект.
- Нишка на потребителския интерфейс (вероятно не основната нишка) взема резултатния обект от опашката с резултати и актуализира потребителския интерфейс.
Възможно е да не е необходима опашка за публикуване на обекти с резултати обратно в потребителския интерфейс. Метод за актуализиране може да бъде извикан директно.
Ако потребителят щракне върху бутон за отмяна, събитието за актуализиране/обратното извикване може да бъде игнорирано или, ако е възможно, заявката за db може да бъде отменена.