From 824e0034c48d9afcc9cce69924a0bebdb46fce31 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Fri, 26 Sep 2008 00:43:14 +0000 Subject: [PATCH] A little bit of optimization --- .../OrderedMemoryAwareThreadPoolExecutor.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/jboss/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java b/src/main/java/org/jboss/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java index a5ca8f67b8..83c112ecd7 100644 --- a/src/main/java/org/jboss/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java +++ b/src/main/java/org/jboss/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java @@ -22,10 +22,7 @@ */ package org.jboss.netty.handler.execution; -import java.util.HashSet; import java.util.LinkedList; -import java.util.Queue; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Executor; @@ -172,19 +169,21 @@ public class OrderedMemoryAwareThreadPoolExecutor extends } private class ChildExecutor implements Executor, Runnable { - private final Set runningChildren = new HashSet(); - private final Queue tasks = new LinkedList(); + private final LinkedList tasks = new LinkedList(); ChildExecutor() { super(); } public void execute(Runnable command) { + boolean needsExecution; synchronized (tasks) { + needsExecution = tasks.isEmpty(); tasks.add(command); - if (tasks.size() == 1 && runningChildren.add(this)) { - doUnorderedExecute(this); - } + } + + if (needsExecution) { + doUnorderedExecute(this); } } @@ -192,13 +191,19 @@ public class OrderedMemoryAwareThreadPoolExecutor extends for (;;) { final Runnable task; synchronized (tasks) { - task = tasks.poll(); - if (task == null) { - runningChildren.remove(this); - return; + task = tasks.getFirst(); + } + + try { + task.run(); + } finally { + synchronized (tasks) { + tasks.removeFirst(); + if (tasks.isEmpty()) { + break; + } } } - task.run(); } } }