Java ThreadPoolExecutor ограничивает размер очереди - PullRequest
0 голосов
/ 23 ноября 2018

Я использую пул потоков для вставки данных в базу данных.Это вторичная тестовая база данных, и время от времени происходит сбой запроса к ней, и очередь пула потоков начинает увеличиваться.Я пытаюсь ограничить размер очереди пула потоков, чтобы в случае каких-либо проблем с базой данных она не занимала память приложения, заполняя очередь.Обратите внимание на 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 (), если он насыщен?

...