Как установить фабрику потоков ForkJoinPool при использовании весенней загрузки? - PullRequest
0 голосов
/ 05 марта 2020

Я хочу установить фабрику потоков ForkJoinPool с помощью -D java .util.concurrent.ForkJoinPool.common.threadFactory = xxx в приложении с весенней загрузкой.

Но это не работает, !!!

Я обнаружил, что ForkJoinPool использует ClassLoader.getSystemClassLoader () для загрузки фабричного класса, но ClassLoader.getSystemClassLoader () возвращает AppClassLoader, который не может загрузить фабричный класс

Я думаю, только org.springframework.loader. LaunchedURLCLassLoader может загрузить фабричный класс, верно? ??

в чем решение?

1 Ответ

0 голосов
/ 08 марта 2020

Реализуете ли вы ForkJoinWorkerThreadFactory ??

Если ваша фабрика пользовательских потоков не реализует ForkJoinWorkerThreadFactory, это вызовет ошибку типа приведения, которая будет проигнорирована. Связанный код скопирован из ForkJoinPool.commonPool следующим образом:

    private static ForkJoinPool makeCommonPool() {
        try {  // ignore exceptions in accessing/parsing properties
            //...
            String fp = System.getProperty
                ("java.util.concurrent.ForkJoinPool.common.threadFactory");
            //...
            if (fp != null)
                factory = ((ForkJoinWorkerThreadFactory)ClassLoader.
                           getSystemClassLoader().loadClass(fp).newInstance());
            //...
        } catch (Exception ignore) {
        }
    }
...