Да, будет. Thread.getContextClassLoader()
- это механизм для загрузки базовых сред из дальнейшего уровня дерева загрузчика классов.
Возьмите иерархию загрузчика классов Tomcat.
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
Платформа сервлета или JSP находится в загрузчике класса Common
. Если одна из этих платформ должна загрузить ресурс classpath из Webapp1
, они могут попробовать:
getClass().getResource("/some/resource/in/webapp1"); // fail
Но поскольку механика загрузки классов вызывает только цепочку загрузчика классов, это может произойти. Это означает, что все фреймворки, которым нужно загрузить ресурс, вместо этого:
Thread.currentThread().getContextClassLoader().getResource("/some/resource/in/webapp1");
И контейнер сервлета гарантирует, что это загрузчик класса Webapp1
всякий раз, когда поток выполняется в этом контексте. Таким образом, загрузчик классов контекста потока является эффективным способом для фреймворков загружать классы из «неправильного направления».
Когда вы создаете новый поток, этот поток по умолчанию получает загрузчик класса контекста своего родителя (ваш Webapp1
загрузчик классов). Следовательно, если вы остановите Webapp1
, tomcat, как предполагается, сможет собирать данные в этом веб-приложении, но не сможет сделать это, пока есть какая-либо ссылка на загрузчик класса Webapp1
- отсюда и предупреждение.
Хорошая статья о загрузчиках контекстных классов .