gb-java-devel/scenarios/jtd3-09b.tex

26 lines
3.9 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[../j-spec.tex]{subfiles}
\begin{document}
\section{Обобщения}
\begin{longtable}{|p{35mm}|p{135mm}|}
\hline
Экран & Слова \\ \hline
\endhead
Титул & Здравствуйте, добро пожаловать на курс посвящённый инструментарию разработчика на джава \\ \hline
Отбивка & в сегодняшней лекции коснёмся одного из ключевых понятий программирования на языке джава -- обобщённого программирования. \\ \hline
\end{longtable}
\end{document}
Когда Вы создаёте приложение на любой платформе у вас создаётся процесс, и как минимум создаётся один поток (мэйн). В джаве таких потоков для каждого процесса создаётся несколько - Main, Error, GC, EDT. Поскольку процессоры у нас ещё не очень хорошо работают с параллельной логикой - создаётся псевдо-параллельность, то есть какое-то количество времени исполняется один поток, какое-то другой, потом снова первый и т.д. И поскольку процессоры сейчас с бешеными гигагерцами, то для человека создаётся впечатление, что это происходит параллельно. Технология называется HyperThreading. Так вот, когда завершается процесс? Когда завершается последний поток. А дефолтный обработчик исключений висит не на процессе, а на потоке. Давайте сделаем так:
psvm
thr new RuntimeException("Hello from main");
Всё очевидно и прямолинейно, случилось исключение в главном потоке, уронили приложение, всё, как и планировалось. А теперь давайте внутри потока EDT попробуем упасть. Всё, что мы начали в этом потоке (конструктор) и всё что внутри конструктора описано - будет в этом потоке. А мэйн будет завершён. Чтобы было показательно - на какую-то кнопку повесим thr new RuntimeException("hello from EDT").
В потоке EDT исключения внезапно ведут себя по-другому. Оно происходит, выбрасывается, но приложение то не падает. Видите, жмём на кнопку, он выбрасывает исключение, и мы всё равно можем нажать на кнопку снова.
Это всё консоль, среда разработки, понятно, мы всё видим. А как вы думаете, что будет, если мы создадим jar файл, и запустим наше приложение отдельно от среды разработки? Вариантов может быть масса, а вы как думаете? Проще всего взять и проверить. (OpenModuleSettings - Artifacts + JAR + fromDependencies - ServerGUI). Делаем ставки. Я думаю тут два варианта - ничего не произойдёт, или упадёт. Второе - лучше. Надо объяснять почему? (что-то в приложении произошло, а мы не увидели). Прониклись проблемой?