Java ThreadPoolExecutor限制队列大小

时间:2018-11-23 16:00:36

标签: java multithreading concurrency executorservice threadpoolexecutor

我正在使用线程池将数据插入数据库。这是一个辅助测试数据库,偶尔对其的请求开始失败,并且线程池队列开始变得越来越大。我试图限制线程池的队列大小,以便如果数据库有任何问题,它不会通过填满队列来接管应用程序的内存。请注意下面的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 Block When Queue Is Full?

How to make ThreadPoolExecutor's submit() method block if it is saturated?

0 个答案:

没有答案