From 89ffd89a31fb41c0a4e32462d4f858b1dd928904 Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 23 May 2013 16:52:50 +0200 Subject: [PATCH] wait for a spot in the queue when full --- .../backend/feeds/FeedRefreshUpdater.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java index 410dec51..b93bddb4 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java @@ -2,7 +2,8 @@ package com.commafeed.backend.feeds; import java.util.Collection; import java.util.List; -import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -59,13 +60,17 @@ public class FeedRefreshUpdater { int threads = Math.max(settings.getDatabaseUpdateThreads(), 1); log.info("Creating database pool with {} threads", threads); pool = new ThreadPoolExecutor(threads, threads, 0, - TimeUnit.MILLISECONDS, new LinkedBlockingQueue( + TimeUnit.MILLISECONDS, new ArrayBlockingQueue( 100 * threads)); - pool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy() { + pool.setRejectedExecutionHandler(new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { - log.debug("Thread queue full, executing in own thread."); - super.rejectedExecution(r, e); + log.info("Thread queue full, waiting..."); + try { + e.getQueue().put(r); + } catch (InterruptedException e1) { + log.error("Interrupted while waiting for queue.", e); + } } }); }