Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Некоторые потоки делают фоновые задачи, как отправка пакетов проверки активности или выполнение периодической сборки "мусора", или что бы то ни было. Они только полезны, когда основная программа работает, и она должна хорошо уничтожить их однажды другой, недемон, потоки вышли.
Без потоков демона, необходимо было бы отслеживать их и сказать им выходить, прежде чем программа сможет полностью выйти. Путем установки их, поскольку демон распараллеливает, можно позволить им выполнить и забыть о них, и когда программа выходит, любые потоки демона уничтожаются автоматически.
Скажем, Вы делаете некоторый виджет панели инструментов. Как часть этого, Вы хотите, чтобы он отобразил непрочитанное количество сообщения в Вашем электронном ящике. Таким образом, Вы делаете немного потока, который будет:
, Когда Ваш виджет запускает, он создал бы этот поток, назвал бы его демоном и запустил бы его. Поскольку это - демон, Вы не должны думать об этом; когда Ваш виджет выйдет, поток остановится автоматически.
Более простой способ думать об этом, возможно: когда основные возвраты, Ваш процесс не выйдет, если будут потоки недемона, все еще работающие.
Немного совета: Чистое завершение работы легко понять превратно, когда потоки и синхронизация включены - если можно избежать его, сделать так. Используйте потоки демона, когда это возможно.
Другие плакаты дали некоторые примеры для ситуаций, в которых Вы будете использовать потоки демона. Моя рекомендация, однако, никогда не состоит в том, чтобы использовать их.
Это - не потому что они не полезны, но потому что существуют некоторые плохие побочные эффекты, которые можно испытать при использовании их. Потоки демона могут все еще выполниться после того, как время выполнения Python начинает разъединять вещи в основном потоке, вызывая некоторые довольно причудливые исключения.
[еще 114] информация здесь:
https://joeshaw.org/python-daemon-threads-considered-harmful /
https://mail.python.org/pipermail/python-list/2005-February/343699.html
Строго говоря Вам никогда не нужны они, он просто делает реализацию легче в некоторых случаях.