Одним из правильных способов может быть настройка / внедрение ThreadFactory для executorservice, и из фабрики потоков вы получите дескриптор созданного потока, а затем вы можете запланировать некоторую задачу для прерывания интересующего потока.
Демонстрационная часть кода для переписанного метода "newThread" в ThreadFactory:
ThreadFactory customThreadfactory new ThreadFactory() {
public Thread newThread(Runnable runnable) {
final Thread thread = new Thread(runnable);
if (namePrefix != null) {
thread.setName(namePrefix + "-" + count.getAndIncrement());
}
if (daemon != null) {
thread.setDaemon(daemon);
}
if (priority != null) {
thread.setPriority(priority);
}
scheduledExecutorService.schedule(new Callable<String>() {
public String call() throws Exception {
System.out.println("Executed!");
thread.interrupt();
return "Called!";
}
},
5,
TimeUnit.SECONDS);
return thread;
}
}
Затем вы можете использовать ниже для создания вашего экземпляра executorservice:
ExecutorService executorService = Executors.newFixedThreadPool(3,
customThreadfactory);
Затем через 5 секунд прерываниесигнал будет отправлен потокам в executorservice.