Пусть ваш Worker
класс extend
Thread
(альтернативно, пусть new Thread(Runnable)
украсит его) и передаст ему Groovy ContextClassLoader
:
Worker worker = new Worker() // extends Thread
worker.setContextClassLoader(
Thread.currentThread().getContextClassLoader())
manager.schedule(worker, ..)
или
Thread worker = new Thread(new Worker())
worker.setContextClassLoader(
Thread.currentThread().getContextClassLoader())
manager.schedule(worker, ..)
Причина: загрузчик классов Groovy загрузил специальные классы Groovy, связанные с метапрограммированием во время выполнения, например, связывание мета-классов и вызов виртуальных методов.Ваш ThreadPoolExecutor
может использовать другой, свежий загрузчик классов, который не знает о «волшебстве» Groovy.