Я использую пул потоков для вставки данных в базу данных.Это вторичная тестовая база данных, и время от времени происходит сбой запроса к ней, и очередь пула потоков начинает увеличиваться.Я пытаюсь ограничить размер очереди пула потоков, чтобы в случае каких-либо проблем с базой данных она не занимала память приложения, заполняя очередь.Обратите внимание на queueSize ниже.
threadpool = new ThreadPoolExecutor(corePoolSize, threadPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(queueSize), new MyThreadFactory());
Я провел небольшое исследование и обнаружил, что, когда очередь заполнена, метод submit генерирует RejectedExecutionException.Поскольку я не хочу делать ничего, кроме размера очереди, и мне не важны тестовые данные, я могу спокойно проигнорировать запрос.Так что я думаю, я мог бы просто сделать что-то подобное ниже.
try {
threadPool.submit(task);
} catch (RejectedExecutionException ree){
//log the request was rejected and ignore the request
}
Если я в порядке, игнорируя запросы после заполнения очереди, безопасна ли эта операция?Я хотел спросить, может ли это создать какие-либо другие проблемы, о которых я не знаю?Я читал другие подобные посты, но их требования были другими, потому что у них не было возможности просто игнорировать запрос.
Блок ThreadPoolExecutor, когда очередь заполнена?
Как сделать метод метода ThreadPoolExecutor submit (), если он насыщен?