Как я могу получить номер (ID) потока в FixedPool? - PullRequest
0 голосов
/ 29 апреля 2018

Я знаю, что Thread.currentThread (). GetName () дает мне имя пула и идентификатор этого потока в пуле. Как я могу просто получить номер?

Это результат строки, которую я упомянул:

бассейн-1-токарно-1

Мне просто нужен последний номер.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Бесполезно в общем случае, но выполняет работу за меня:

Thread.currentThread().getName().substring(Thread.currentThread().getName().length()-1)
0 голосов
/ 29 апреля 2018

Когда вы создаете ThreadPoolExecutor с помощью Executors.newFixedThreadPool, он создает по умолчанию ThreadFactory , и по умолчанию ThreadFactory создает Thread с именем, подобным pool-x-thread-y.

Вы можете настроить ThreadFactory и использовать его для создания пула потоков:

class NumberThreadFactory implements ThreadFactory {        
    int count = 0;
    public Thread newThread(Runnable r) {
        return new Thread(r, String.valueOf(count++));
    }
}

Executor executor = Executors.newFixedThreadPool(2, new NumberThreadFactory());

executor.execute(() -> System.out.println(Thread.currentThread().getName()));  // 1
executor.execute(() -> System.out.println(Thread.currentThread().getName()));  // 2
...