Ken,<br><br>I&#39;m imagining a serial executor per client:<br><br>ExecutorService pool = Executors.newCachedThreadPool();<br><br>Executor execA = new SerialExecutor(pool);<br>
Executor execB = new SerialExecutor(pool);<br>
<br>SerialTask task1 = new SerialTask(&quot;client-a&quot;, 10);<br>
SerialTask task2 = new SerialTask(&quot;client-a&quot;, 10);<br>
SerialTask task3 = new SerialTask(&quot;client-a&quot;, 10);<br>
SerialTask task4 = new SerialTask(&quot;client-b&quot;, 2000);<br>
SerialTask task5 = new SerialTask(&quot;client-b&quot;, 4000);<br>
SerialTask task6 = new SerialTask(&quot;client-a&quot;, 10);<br>
<br>execA.execute(task1);<br>
execA.execute(task2);<br>
execA.execute(task3);<br>
execB.execute(task4);<br>
execB.execute(task5);<br>
execA.execute(task6);<br>
<br>--Joe<br><br><div class="gmail_quote">On Fri, Dec 4, 2009 at 9:51 PM, <a href="mailto:Ken--@newsgroupstats.hk">Ken--@newsgroupstats.hk</a> <span dir="ltr"></span>wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Dear Joe,<br>
<br>
Sorry I cannot under how to achieve it. I have tasks to be submitted in<br>
order (task1 to task6) like this:<br>
<br>
public class SerialTask implements Runnable {<br>
    private String client = null;<br>
    private long sleep = 0;<br>
    public SerialTask(String client, long sleep){<br>
        this.client = client;<br>
        this.sleep = sleep;<br>
    }<br>
    public void run() {<br>
        try {Thread.sleep(sleep);} catch (Exception e) {}<br>
        String msg = &quot;Task ID = &quot; + client + &quot;, sleep = &quot; + sleep;<br>
        System.out.println(msg);<br>
    }<br>
}<br>
<br>
SerialTask task1 = new SerialTask(&quot;client-a&quot;, 10);<br>
SerialTask task2 = new SerialTask(&quot;client-a&quot;, 10);<br>
SerialTask task3 = new SerialTask(&quot;client-a&quot;, 10);<br>
SerialTask task4 = new SerialTask(&quot;client-b&quot;, 2000);<br>
SerialTask task5 = new SerialTask(&quot;client-b&quot;, 4000);<br>
SerialTask task6 = new SerialTask(&quot;client-a&quot;, 10);<br>
<br>
How can I make use of SerialExecutor to execute client&#39;s task in order? I<br>
expected client-a&#39;s tasks can be finished in 40 mills and tasks are run in<br>
serial. and after around (2000 + 4000 - 40) mills, all client-b tasks are<br>
finished.<br>
<br>
Regards,<br>
Ken<br>
<div><div></div><div class="h5"><br>
<br>
<br>
<br>
Joe Bowbeer wrote:<br>
&gt;<br>
&gt; If each client&#39;s tasks are executed sequentially, you can use a<br>
&gt; SerialExecutor per client.  See the &quot;SerialExecutor&quot; example in the<br>
&gt; Executor<br>
&gt; javadoc.  Each client&#39;s executor would delegate to the shared thread pool<br>
&gt; executor.<br>
&gt;<br>
&gt; If all tasks can execute in concurrently, but you want to retire them in<br>
&gt; order, I think there was a useful discussion about this in June &#39;08.<br>
&gt; Search for &quot;Out-of-order execution, in-order retirement&quot;.<br>
&gt;<br>
&gt; (The suggestion was to queue the Futures when the Callables are submitted,<br>
&gt; and retire the tasks in the order they were enqueued.)<br>
&gt;<br>
&gt; --Joe<br>
&gt;<br>
&gt; On Wed, Dec 2, 2009 at 6:32 PM, <a href="mailto:Ken--@newsgroupstats.hk">Ken--@newsgroupstats.hk</a> wrote:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Hi All,<br>
&gt;&gt;<br>
&gt;&gt; I have a Task Queue (ArrayBlockingQueue) with single thread for client&#39;s<br>
&gt;&gt; task processing. For same client, I  have to guarantee the ordering of<br>
&gt;&gt; task<br>
&gt;&gt; results as I need the result of previous task to perform next task of the<br>
&gt;&gt; same client. It&#39;s work for ArrayBlockQueue with single thread as it&#39;s<br>
&gt;&gt; always<br>
&gt;&gt; FIFO.<br>
&gt;&gt;<br>
&gt;&gt; My question is, how to enable multi threads (like ThreadPoolExecutor) for<br>
&gt;&gt; queue but maintaining the ordering of same client&#39;s tasks? I tried<br>
&gt;&gt; PriorityBlockingQueue but it just ensure tasks are started in order.<br>
&gt;&gt;<br>
&gt;&gt; Any solution? Please help.<br>
&gt;&gt;<br>
&gt;&gt; Thanks and Best Regards,<br>
&gt;&gt; Ken<br>
&gt;&gt;<br>
&gt;&gt;<br></div></div></blockquote></div>