Должен ли ClassLoader быть thread-safe? Имеет ли смысл кешировать загруженные классы?
В Java есть такая штука как ClassLoader's, но метод defineClass() в нем не синхронизированный, так же как и методы findClass() и loadClass(), что странно, так как разные потоки вполне могут обращаться к этим методам одновременно, что чревато повторной загрузкой например.
Стоит ли делать кастомный загрузчик thread-safe?
И, как мне кажется с этим должно быть тесно связано: Стоит ли делать кастомный загрузчик кешируюущим, если загрузка класса — длительный процесс?
Нет, всё уже сделано за вас.
Метод loadClass(String name, boolean resolve) синхронизованный.
Второй раз один и тот же класс загружаться не будет, поэтому в ручном кэшировании смысла нет.
Спасибо, как то прошло мимо внимания. Выходит все ОК, если я расширяю его через findClass при наследовании. Но ответ на вопрос получается, да — должен :)
На вопрос «Должен ли ClassLoader быть thread-safe» ответ да, а на вопрос «Стоит ли делать кастомный загрузчик thread-safe» — нет, всё получится само собой.
Я, видимо, на второй отвечал :-)