Подтвердить что ты не робот

Как назвать потоки пула потоков в Java

У меня есть приложение Java, которое использует структуру Executor, и у меня есть код, который выглядит так: protected ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(5)

Я понимаю, что внутри JVM создаст пул из 5 потоков. Теперь, когда я проверяю выполнение в профилировщике, я получаю что-то вроде thread-pool2,thread-pool3 и т.д.

Some of these thread pools are created by the server and some are created by me, мне нужен способ дифференцировать, которые были созданы мной и которые были созданы сервером.

Я думаю, что если я могу назвать пулы потоков, он должен сделать трюк, однако не вижу никакого API, который позволил бы мне сделать то же самое.

Спасибо заранее.

4b9b3361

Ответ 1

Вы можете передать свой ThreadFactory в ScheduledThreadPoolExecutor. Ваш ThreadFactory создаст поток и может дать ему любое имя, которое вы хотите. Ваш ThreadFactory также может повторно использовать Executors.defaultThreadFactory() и только изменить имя перед возвратом потока.

Ответ 2

public class NamedThreadPoolExecutor extends ThreadPoolExecutor {

private static final String THREAD_NAME_PATTERN = "%s-%d";

    public NamedThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, final TimeUnit unit,
                               final String namePrefix) {
       super(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingQueue<>(),
            new ThreadFactory() {

                private final AtomicInteger counter = new AtomicInteger();

                @Override
                public Thread newThread(Runnable r) {
                    final String threadName = String.format(THREAD_NAME_PATTERN, namePrefix, counter.incrementAndGet());
                    return new Thread(r, threadName);
                }
            });
    }

}

Ответ 3

Из документа ThreadPoolExecutor :

Создание новых потоков Новые потоки создаются с помощью ThreadFactory. Если не указано иное, используется Executors.defaultThreadFactory(), который создает потоки для всех в одной и той же ThreadGroup и с тем же приоритетом NORM_PRIORITY и не-демоном. Поставляя другой ThreadFactory, вы можете изменить имя потока, группу потоков, приоритет, статус демона и т.д. Если ThreadFactory не сможет создать поток, когда его спросят, возвратив null из newThread, исполнитель продолжит, но может не выполнять какие-либо задачи.

Ответ 4

Используйте свой собственный поток factory. Внедрите ThreadFactoryBuilder для создания пользовательских фабрик потоков, которые позволят вам выполнить следующие действия:

  • У пользовательских имен потоков
  • У вас есть выбор потоков - потоки пользователей или Daemon
  • Выберите приоритет потока
  • Уметь гибко настраивать обработчики исключенных обработчиков.

У вас есть пример реализации ThreadFactoryBuilder в следующем сообщении, которое вы можете использовать.

http://wilddiary.com/understanding-java-threadfactory-creating-custom-thread-factories/