Что это за потоки, которые создаются, когда Java-приложение начинает свое выполнение?
-
19-09-2019 - |
Вопрос
Я создал простое Java-приложение с JFrame и несколькими JButtons.Когда я попытался проверить Java-приложение с помощью JVMTI, я обнаружил, что, хотя я не создавал никаких явных потоков, их было создано много.
Мне удалось найти следующие темы:
- Уничтожить JavaVM
- AWT-EventQueue-0
- AWT-Выключение
- AWT-XAWT — поток демона
- Java2D Disposer — поток демона
- Thread-0 — поток демона [созданный агентом JVMTI]
- Диспетчер сигналов — поток демона
- Finalize — демоническая нить
- Обработчик ссылок — поток демона
Большинство из них находились в состоянии Runnable.Может кто-нибудь сказать мне функцию этих нитей?
Решение
Эти потоки используются базовыми библиотеками для управления виджетами, отображением, циклом событий и другим оборудованием, необходимым для вашего графического приложения.
Приложение с графическим пользовательским интерфейсом обычно имеет множество движущихся частей, и, как вы заметили, вам не нужно явно писать какой-либо код для управления этими частями (например, обновление экрана, рисование кнопки или обработка движения мыши).Это набор фоновых потоков, которые отвечают за управление этими частями и позволяют вам максимально легко сосредоточиться на логике вашего приложения.
Эти потоки порождаются используемыми вами библиотеками (например, AWT, Swing и т. д.) и обычно очищают себя (и ресурсы, которыми они управляют) после завершения.
Другие советы
Я могу сказать тебе одно, а угадать три...
- AWT-EventQueue-0
Это тема GUI/Awt/Swing.Все, что пишется в графический интерфейс, должно выполняться в этом потоке!Иногда, если я думаю, что есть момент, когда другой поток МОЖЕТ писать в графический интерфейс, я перехожу к моменту, где, по моему мнению, может возникнуть конфликт, и утверждаю, что имя текущего потока соответствует «AWT-EventQueue-0». .
Мне бы очень хотелось, чтобы Sun выпустила «отладочную» версию библиотеки, которая бы обеспечивала правильное использование потоков во всех компонентах — это избавило бы от многих головных болей и спасло бы Java от действительно плохого REP для сбоев графических интерфейсов, когда на самом деле это делают люди. не понимаю в этой теме.
Вероятно, все они связаны с многопоточным сборщиком мусора:
- Java2D Disposer — поток демона
- Finalize — демоническая нить
- Обработчик ссылок — поток демона