У меня есть общий вопрос о чем-то я работал на и поиск ответов на 3 дня теперьJava вопросы выполнения программы
Сценарий 1 (и в основном отказались от из чистого разочарования.);
метод) называется, что создает и отображает «Пожалуйста, подождите ..» JWindow компонент с .setVisible (истинной)
B) метод называется, что делает простые расчеты и System.out-х годах результаты
C) «Пожалуйста, подождите ..» сохраняется, как ожидается, на стадии исполнения B
D) стадия B и заканчивается .setVisible (ложь) называется на «Пожалуйста, подождите» окно, и это идет так, как ожидалось
До сих пор о, хорошо.
Сценарий 2;
То же, что и сценарий 1, за исключением того, что работа на этапе B намного сложнее и вызывает пользовательский класс, который выполняет кучу db-запросов/записей, которые занимают в среднем около 3-6 секунд для завершения. Пользовательский класс не запускается или не нарезается резьбой и просто вызывается с;
customClass cc = new customClass();
cc.makeMyDataPlease();
- по какой-либо причине, в сценарии 2 .setVisible (истина), шаг 'A' не происходит до тех пор, после комплекса этап работы 'B' не будет завершена.
Я провел 2 1/2 дня, экспериментируя со многими решениями этих типов проблем, найденными на этом сайте, а другие - без везения. Пробовал swingworker, invokelater, нитку и т. Д. И пришел к выводу, что мне нужно исследовать это еще до того, как вырвать больше волос.
У меня была аналогичная проблема с методом, который соединяется с URL-адресом и публикует данные. Я пытался просто установить текст на простой JLabel непосредственно перед запуском процедуры подключения к сети, и он тоже не удался. Текст был установлен после завершения веб-процедуры.
Как будто виртуальная машина была нарезать каждое выполнение инструкции.
Мое подозрение, что классы mysql и сетевые классы URL совместно используют свойства (networking?), Которые замораживают другие задачи, которые, возможно, не успели закончить.
Вот мои вопросы/неурядицы:
Если исполнение в главном потоке Java является последовательным, если новый поток не будет создан/называется, почему бы ничего мешать этому SetVisible (правда) заявление? Он логически должен завершить до того, как выполняются обычные операторы базы данных, и все же это не так.
Что является окончательным способом в java, чтобы гарантировать, что один оператор полностью выполнен до следующий?(Или, по крайней мере, , а следующий, так как я уверен, что VM может сделать setVisible достаточно быстро, чтобы они могли даже начать синхронно).
Заранее спасибо
В частности мой вопрос; что лучше всего подходит для решения проблем параллелизма, связанных с процедурами «blocker» в java и как лучше всего работать в рамках этих ограничений.
Я думаю, что моя путаница/есть; если, как вы говорите, качание - это однопоточная среда, то как мы определяем, кроме подхода «попытаться, провалиться, продолжать», что такое «блокирующий» процесс, а что нет? – jeff
Многие придут к опыту, некоторые придут к здравому смыслу, а остальное придет от чтения документов ... – MadProgrammer
Но ваш ответ действительно полезен, и я думаю, мне, возможно, придется пойти с этим подходом. Я надеялся, что этого не произойдет, поскольку у меня много сложных процедур, которые теперь все должны быть переписаны/реструктурированы. Но, по крайней мере, они будут выполнены правильно. Живи и учись. Благодаря! – jeff