Пример кода
ClassLoader loader = URLClassLoader.newInstance(
new URL[] { yourURL },
getClass().getClassLoader()
);
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
Class<? extends Runnable> runClass = clazz.asSubclass(Runnable.class);
// Avoid Class.newInstance, for it is evil.
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();
doRun.run();
предполагает, что загружаемый вами класс реализует определенный интерфейс Runnable, и поэтому целесообразно привести его к этому типу с помощью asSubclass () и вызвать run ().
Что вы знаете о загружаемых классах? Можете ли вы предположить, что они реализуют конкретный интерфейс? Если это так, настройте строку asSubClass () так, чтобы она ссылалась на взаимодействие, которое вы предпочитаете.
Тогда, да, если вы работаете с методами экземпляра, создайте экземпляр, используя конструктор, ctor в примере.
В примере нет запуска потока. Для создания нового потока просто понадобилось бы на пару строк больше кода
Thread myThread = new Thread(doRun);
myThread.start();