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

26 lines
3.9 KiB
TeX
Raw Normal View History

2023-05-23 22:25:16 +03:00
\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). Делаем ставки. Я думаю тут два варианта - ничего не произойдёт, или упадёт. Второе - лучше. Надо объяснять почему? (что-то в приложении произошло, а мы не увидели). Прониклись проблемой?