Я задал этот вопрос раньше, но не смог его открыть снова, так как мое обновление не ударило процесс повторного открытия. Таким образом, повторная отправкаКак справиться с ситуацией, когда ExecutorService ThreadFactory возвращает нуль вместо aad
Мой вопрос: как получить ExecutorService, чтобы понять, что поток недействителен (null) сразу, не дожидаясь выхода в будущее.
У меня есть прецедент, когда при создании потока в ThreadFactory я хочу вернуть значение null, если поток не может быть настроен правильно (например, он не может подключиться к серверу).
Когда ExecutorService запускает отправку по вызываемому, и ThreadFactory возвращает значение null, как показано ниже, код будет работать, но будет ждать в будущем. (5, TimeUnit.SECONDS); а затем выбросить исключение TimeoutException. Проблема в том, что ThreadFactory.newThread() не позволяет мне создавать исключение здесь.
public class TestThreadFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable r) {
// try to create a conneciton that fails
// I cannot throw an exception here, so if there is a problem I have to return null
return null;
}
}
public class ExecutorServicePool {
public static ExecutorService getService() {
return Executors.newFixedThreadPool(10, new TestThreadFactory());
}
}
public static void main(String[] args) {
ExecutorService executorService = ExecutorServicePool.getService();
Callable callable = new Callable<String>() {
@Override
public String call() throws Exception {
return "callable";
}
};
Future<String> future = executorService.submit(callable);
try {
future.get(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
executorService.shutdown();
}
Это очень странный образец. Когда вы захотите _want_ вернуть null из 'ThreadFactory'? Какова цель? – Gray
The Thread устанавливает соединение с сервером при его создании. Если попытка подключения не удалась, поток не должен быть создан, и об этом нужно сообщить об этом. Должен ли я пытаться по-другому. – user1213428