<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
My attempt at solving Glenn's problem is available here:<br>
<br>
<a class="moz-txt-link-freetext" href="https://github.com/kabutz/javaspecialists/tree/master/src/main/java/eu/javaspecialists/tjsn/concurrency/stripedexecutor">https://github.com/kabutz/javaspecialists/tree/master/src/main/java/eu/javaspecialists/tjsn/concurrency/stripedexecutor</a><br>
<br>
with some test code over here:<br>
<br>
<a class="moz-txt-link-freetext" href="https://github.com/kabutz/javaspecialists/tree/master/src/test/java/eu/javaspecialists/tjsn/concurrency/stripedexecutor">https://github.com/kabutz/javaspecialists/tree/master/src/test/java/eu/javaspecialists/tjsn/concurrency/stripedexecutor</a><br>
<br>
Or you can grab the entire maven repository here (currently only
contains the StripedExecutorService)
git://github.com/kabutz/javaspecialists.git<br>
<br>
The tests seem to work as I had expected they should.<br>
<br>
Here are some of the features:<br>
<br>
1. Can accept either Runnable or Callable.  These can implement the
StripedObject interface, in which case they will be executed, in order,
according to the stripe object.<br>
<br>
2. Can also accept "normal" Runnable or Callable, in which case they
will simply be passed onto the executor<br>
<br>
3. Can wrap any ExecutorService<br>
<br>
4. Is compatible with the CompletionService wrapping the
StripedExecutorService.<br>
<br>
5. shutdown() works<br>
<br>
6. shutdownNow() works<br>
<br>
7. awaitTermination() works<br>
<br>
8. Stripes are associated by identity, so you do not need to implement
hashCode() yourself<br>
<br>
9. Is thread safe, but not lock-free.<br>
<br>
10. Is completely undocumented.  I will add some comments later.<br>
<br>
<pre class="moz-signature" cols="72">Regards

Heinz
-- 
Dr Heinz M. Kabutz (PhD CompSci)
Author of "The Java(tm) Specialists' Newsletter"
Sun Java Champion
IEEE Certified Software Development Professional
<a class="moz-txt-link-freetext" href="http://www.javaspecialists.eu">http://www.javaspecialists.eu</a>
Tel: +30 69 75 595 262
Skype: kabutz 
</pre>
<br>
<br>
On 5/16/12 12:00 PM, √iktor Ҡlang wrote:
<blockquote
 cite="mid:CANPzfU937VfAYrh3cS=QyHsSe_=8rPCMbMCc=55di9qqqFGaoQ@mail.gmail.com"
 type="cite"><br>
  <br>
  <div class="gmail_quote">On Wed, May 16, 2012 at 10:59 AM, Dr Heinz
M. Kabutz <span dir="ltr"><<a moz-do-not-send="true"
 href="mailto:heinz@javaspecialists.eu" target="_blank">heinz@javaspecialists.eu</a>></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;">
    <div bgcolor="#ffffff" text="#000000">
    <br>
    <blockquote type="cite">
      <div class="gmail_quote">
      <div class="im">On Wed, May 16, 2012 at 10:16 AM, Dr Heinz
M. Kabutz <span dir="ltr"><<a moz-do-not-send="true"
 href="mailto:heinz@javaspecialists.eu" target="_blank">heinz@javaspecialists.eu</a>></span>
wrote:<br>
  </div>
      <div class="im">
      <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
        <div bgcolor="#ffffff" text="#000000"><br>
2. I've got a nice solution utilizing the SerialExecutor approach,
however, as Joe mentioned, shutdown is particularly challenging.  I'm
still trying to solve that, but it is not easy.<br>
        </div>
      </blockquote>
      <div><br>
      </div>
      <div>Executor has no shutdown ;-)</div>
      </div>
      </div>
    </blockquote>
Yeah :-)  But then it is also not all that useful, as you will possibly
have objects stuck in the queues waiting to be scheduled.  How does one
then shut down the whole construct?  Answer: You don't ;-)</div>
  </blockquote>
  <div><br>
  </div>
  <div>Let it run free!</div>
  <div> </div>
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div bgcolor="#ffffff" text="#000000">
    <div class="im"><br>
    <blockquote type="cite">
      <div class="gmail_quote">
      <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
        <div bgcolor="#ffffff" text="#000000"><br>
3. Another challenge, also mentioned already in this thread, is that we
need to carefully manage the map so that we do not get a memory leak. 
The solution I'm trying now is to delete the SerialExecutor from the
map whenever it is empty.  This might create a lot of objects, but at
least we don't have to worry about a memory leak.</div>
      </blockquote>
      <div><br>
      </div>
      <div>If you have the SerialExecutor extend CLQ and use a
@volatile
int/boolean to keep track of "is scheduled" or not then it's
essentially only 2 allocations to create the SerialExecutor:</div>
      <div><br>
      </div>
      <div>1 for the head-node in the CLQ and one for the
SerialExecutor
itself, so it shouldn't be that bad.</div>
      <div><br>
      </div>
      <div>However, the performance will of course vary depending on
how
it's used.</div>
      </div>
    </blockquote>
    </div>
Actually, I'm not really too worried about performance.  Glenn McGregor
was trying to solve a specific problem - that is to have his tasks
execute in order according to a particular stripe.  Thus the
requirement is not to be particularly lock-free or low contention.  In
my current solution I've got a big fat ReentrantLock that governs
everything.  This way I can manage the shared mutable state correctly.<br>
    <br>
Make it run, make it right, make it fast.<br>
    </div>
  </blockquote>
  </div>
  <div><br>
  </div>
Yeah, I implemented the version that does remove with WRL too, it's the
easiest way to solve it.
  <div><br>
  </div>
  <div>Cheers,</div>
  <div>√<br>
  <br clear="all">
  <div><br>
  </div>
-- <br>
  <span
 style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Times; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; font-size: medium;"><span
 style="font-family: arial; font-size: small;"><span
 style="border-collapse: collapse; font-family: arial,sans-serif; font-size: 13px;">Viktor
Klang<br>
  <br>
Akka Tech Lead</span>
  <div><font face="arial, sans-serif"><span
 style="border-collapse: collapse;"><a moz-do-not-send="true"
 href="http://www.typesafe.com/" target="_blank">Typesafe</a><span> </span>-
  </span></font><span>The software stack for applications that scale</span><br>
  <font face="arial, sans-serif"><span
 style="border-collapse: collapse;"><br>
  </span></font><font face="arial, sans-serif"><span
 style="border-collapse: collapse;">Twitter: @viktorklang</span></font></div>
  </span></span><br>
  </div>
</blockquote>
</body>
</html>