SlideShare a Scribd company logo
1 of 31
Jitendra Chittoda, Member Development Department @ ION Trading India
Pvt. Ltd.
Co-leader Delhi and NCR Java User Group (DaNJUG)
Email: jitendra@chittoda.com
Twitter: @JChittoda
Blog: http://chittoda.com
Sequential Concurrency…. WHAT
???
08 May 20131
JavaOne India 2013 : COM1240
Delhi & NCR JUG (DaNJUG)
08 May 20132
 30+ Members
 Looking for more active members
 Meetup.com, Groups
 If your friends are in Delhi NCR, please spread
the word
Agenda
 What is ThreadPool
 Benefits of using ThreadPool
 What we can’t achieve with ThreadPool
 Why & Where ?
 Sequential Concurrency Fundamentals
 SerialExecutor
 StripedExecutorService Design
 Features
 Current State
08 May 20133
ThreadPool
08 May 20134
Benefits of ThreadPool
08 May 20135
 Pre-initialized pool of threads
 Reusable threads
 Configurable
What we can’t achieve with
ThreadPool
08 May 20136
 As per the business requirement, sometimes you
may want to process Tasks in specific order.
 Tasks execution order is not maintained by the
normal ThreadPools
 Processing Not Ordered
 Processing of a Task is not ordered, you can say its
uncertain.
08 May 20137
Why? Industry Examples
08 May 20138
 Exchange trading
 Processing of trades on an instrument.
 Train Reservations
 Ticket booking requests for a train must be
processed in FIFO order.
 Multi Tenancy
 Each tenant want some specific execution to be
ordered
Where ?
08 May 20139
 First saw in 2007 then in 2010 and in 2011
 November 2011: Started writing my own
implementation, published a blog on
http://chittoda.com
 November 2012:
 http://www.javaspecialists.eu/archive/Issue206.html
 Heinz got 5 different implementations after this
issue.
Sequential Concurrency
Fundamentals
08 May 201310
•Identification
•Maintaining Order
•Sequential Processing
•No Dependency
Sequential Concurrency
Fundamentals
08 May 201311
 Identification
• Maintain the sequence based on some Stripe or
Key
• Stripe: An object which is common among the
Tasks those needs to be processed in sequence.
Sequential Concurrency
Fundamentals
08 May 201312
 Maintaining Order
• Maintain the sequential ordering tasks
• FIFO Order
Sequential Concurrency
Fundamentals
08 May 201313
 Sequential Processing
 Process tasks of a Stripe in sequence
 To maintain this we assign one and only one Thread to a
Queue.
Sequential Concurrency
Fundamentals
08 May 201314
 No Dependency
 Tasks of one Stripe-X should not be dependent on Tasks of
another Stripe-Y
Sequential Concurrency
08 May 201315
12 132
Pool of
Threads
Queue of
Stripe
StripedExecutorServic
e
T-
1
T-
2
T-
3
Executor JavaDoc
08 May 201316
• Many Executor implementations impose some sort of
limitation on how and when tasks are scheduled. The
executor below serializes the submission of tasks to a
second executor, illustrating a composite executor.
class SerialExecutor implements Executor {
Queue<Runnable> tasks = new ArrayDeque<>();
Executor executor;
Runnable active;
SerialExecutor(Executor executor) {
this.executor = executor;
}
SerialExecutor
08 May 201317
public void execute(final Runnable r) {
tasks.offer(new Runnable() {
public void run() {
try {
r.run();
} finally {
scheduleNext();
}
}
});
if (active == null) {
scheduleNext();
}
}
SerialExecutor
08 May 201318
protected void scheduleNext() {
if ((active = tasks.poll()) != null) {
executor.execute(active);
}
}
Pool of SerialExecutor
08 May 201319
 SerialExecutor maintain the sequence of the
tasks assigned to it and process them in
sequence. Using single queue.
 BUT we need pool of SerialExecutor, so that we
can concurrently execute tasks of two or more
Striped Queues
Implementation Details
08 May 201320
1) Identification
• Stripe: We are using Object as Stripe, you can
define your own.
2) Maintain Order
• With separate Queue based on Stripe.
• SerialExecutor is maintaining a Queue
3) Sequential Processing
• Handled by SerialExecutor
4) No Dependency
• Handled by SerialExecutor
Design
08 May 201321
08 May 201322
08 May 201323
Inside StripedExecutorService
08 May 201324
class SerialExecutor implements Executor {
private BlockingQueue<Runnable> tasks =
new LinkedBlockingQueue<>();
private Runnable active;
private final Object stripe;
private SerialExecutor(Object stripe) {
this.stripe = stripe;
}
08 May 201325
public void execute(final Runnable r) {
lock.lock();
try {
tasks.add(new Runnable() {
public void run() {
try {
r.run();
} finally { scheduleNext(); }
}
});
if (active == null){ scheduleNext(); }
} finally {
lock.unlock();
}
}
Inside StripedExecutorService
08 May 201326
private void scheduleNext() {
lock.lock();
try {
if ((active = tasks.poll()) != null) {
executor.execute(active);
terminating.signalAll();
} else {
removeEmptySerialExecutor(stripe, this);
}
} finally {
lock.unlock();
}
}
08 May 201327
private final ExecutorService executor;
private final Map<Object, SerialExecutor> executors =
new IdentityHashMap<>();
public void execute(Runnable command) {
lock.lock();
try {
Object stripe = getStripe(command);
if (stripe != null) {
SerialExecutor ser_exec=
executors.get(stripe);
if (ser_exec == null) {
executors.put(stripe, ser_exec=
new SerialExecutor(stripe));
}
ser_exec.execute(command);
} else { executor.execute(command); }
} finally { lock.unlock(); }
}
Features
08 May 201328
 Non striped tasks can also be handled with SES
 Queues gets created when required
 No memory leaks in terms of the Queues. Queues
gets removed once all tasks are finished.
Current State
08 May 201329
 Work In Progress
 Several other implementations available, but no
one passes the tests written for
StripedExecutorService
 Performance
References
08 May 201330
 Delhi & NCR JUG
 https://groups.google.com/d/forum/dncrjug
 GitHub :
 https://github.com/kabutz/striped-executor-service
 Dr. Heinz Kabutz Newsletter
 http://www.javaspecialists.eu/archive/Issue206.html
 http://www.javaspecialists.eu/
 Blog
 http://chittoda.com
08 May 201331

More Related Content

Similar to Jitendra Chittoda discusses sequential concurrency and StripedExecutorService design

Similar to Jitendra Chittoda discusses sequential concurrency and StripedExecutorService design (20)

Microservices and modularity with java
Microservices and modularity with javaMicroservices and modularity with java
Microservices and modularity with java
 
important struts interview questions
important struts interview questionsimportant struts interview questions
important struts interview questions
 
MySQL Fabric: Easy Management of MySQL Servers
MySQL Fabric: Easy Management of MySQL ServersMySQL Fabric: Easy Management of MySQL Servers
MySQL Fabric: Easy Management of MySQL Servers
 
Struts 2-overview2
Struts 2-overview2Struts 2-overview2
Struts 2-overview2
 
Struts2-Spring=Hibernate
Struts2-Spring=HibernateStruts2-Spring=Hibernate
Struts2-Spring=Hibernate
 
Scalamen and OT
Scalamen and OTScalamen and OT
Scalamen and OT
 
Unit-Testing Your Legacy JavaScript
Unit-Testing Your Legacy JavaScriptUnit-Testing Your Legacy JavaScript
Unit-Testing Your Legacy JavaScript
 
Struts framework
Struts frameworkStruts framework
Struts framework
 
72185-26528-StrutsMVC
72185-26528-StrutsMVC72185-26528-StrutsMVC
72185-26528-StrutsMVC
 
Struts framework
Struts frameworkStruts framework
Struts framework
 
Extending the Mule Runtime - Building a Circuit Breaker Component.pptx
Extending the Mule Runtime - Building a Circuit Breaker Component.pptxExtending the Mule Runtime - Building a Circuit Breaker Component.pptx
Extending the Mule Runtime - Building a Circuit Breaker Component.pptx
 
Distributed tracing 101
Distributed tracing 101Distributed tracing 101
Distributed tracing 101
 
Distributed Tracing
Distributed TracingDistributed Tracing
Distributed Tracing
 
Java concurrency
Java concurrencyJava concurrency
Java concurrency
 
Jakarta Concurrency: Present and Future
Jakarta Concurrency: Present and FutureJakarta Concurrency: Present and Future
Jakarta Concurrency: Present and Future
 
Session 41 - Struts 2 Introduction
Session 41 - Struts 2 IntroductionSession 41 - Struts 2 Introduction
Session 41 - Struts 2 Introduction
 
Struts2
Struts2Struts2
Struts2
 
Struts 2-overview2
Struts 2-overview2Struts 2-overview2
Struts 2-overview2
 
ow.ppt
ow.pptow.ppt
ow.ppt
 
ow.ppt
ow.pptow.ppt
ow.ppt
 

Recently uploaded

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Recently uploaded (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Jitendra Chittoda discusses sequential concurrency and StripedExecutorService design

  • 1. Jitendra Chittoda, Member Development Department @ ION Trading India Pvt. Ltd. Co-leader Delhi and NCR Java User Group (DaNJUG) Email: jitendra@chittoda.com Twitter: @JChittoda Blog: http://chittoda.com Sequential Concurrency…. WHAT ??? 08 May 20131 JavaOne India 2013 : COM1240
  • 2. Delhi & NCR JUG (DaNJUG) 08 May 20132  30+ Members  Looking for more active members  Meetup.com, Groups  If your friends are in Delhi NCR, please spread the word
  • 3. Agenda  What is ThreadPool  Benefits of using ThreadPool  What we can’t achieve with ThreadPool  Why & Where ?  Sequential Concurrency Fundamentals  SerialExecutor  StripedExecutorService Design  Features  Current State 08 May 20133
  • 5. Benefits of ThreadPool 08 May 20135  Pre-initialized pool of threads  Reusable threads  Configurable
  • 6. What we can’t achieve with ThreadPool 08 May 20136  As per the business requirement, sometimes you may want to process Tasks in specific order.  Tasks execution order is not maintained by the normal ThreadPools  Processing Not Ordered  Processing of a Task is not ordered, you can say its uncertain.
  • 8. Why? Industry Examples 08 May 20138  Exchange trading  Processing of trades on an instrument.  Train Reservations  Ticket booking requests for a train must be processed in FIFO order.  Multi Tenancy  Each tenant want some specific execution to be ordered
  • 9. Where ? 08 May 20139  First saw in 2007 then in 2010 and in 2011  November 2011: Started writing my own implementation, published a blog on http://chittoda.com  November 2012:  http://www.javaspecialists.eu/archive/Issue206.html  Heinz got 5 different implementations after this issue.
  • 10. Sequential Concurrency Fundamentals 08 May 201310 •Identification •Maintaining Order •Sequential Processing •No Dependency
  • 11. Sequential Concurrency Fundamentals 08 May 201311  Identification • Maintain the sequence based on some Stripe or Key • Stripe: An object which is common among the Tasks those needs to be processed in sequence.
  • 12. Sequential Concurrency Fundamentals 08 May 201312  Maintaining Order • Maintain the sequential ordering tasks • FIFO Order
  • 13. Sequential Concurrency Fundamentals 08 May 201313  Sequential Processing  Process tasks of a Stripe in sequence  To maintain this we assign one and only one Thread to a Queue.
  • 14. Sequential Concurrency Fundamentals 08 May 201314  No Dependency  Tasks of one Stripe-X should not be dependent on Tasks of another Stripe-Y
  • 15. Sequential Concurrency 08 May 201315 12 132 Pool of Threads Queue of Stripe StripedExecutorServic e T- 1 T- 2 T- 3
  • 16. Executor JavaDoc 08 May 201316 • Many Executor implementations impose some sort of limitation on how and when tasks are scheduled. The executor below serializes the submission of tasks to a second executor, illustrating a composite executor. class SerialExecutor implements Executor { Queue<Runnable> tasks = new ArrayDeque<>(); Executor executor; Runnable active; SerialExecutor(Executor executor) { this.executor = executor; }
  • 17. SerialExecutor 08 May 201317 public void execute(final Runnable r) { tasks.offer(new Runnable() { public void run() { try { r.run(); } finally { scheduleNext(); } } }); if (active == null) { scheduleNext(); } }
  • 18. SerialExecutor 08 May 201318 protected void scheduleNext() { if ((active = tasks.poll()) != null) { executor.execute(active); } }
  • 19. Pool of SerialExecutor 08 May 201319  SerialExecutor maintain the sequence of the tasks assigned to it and process them in sequence. Using single queue.  BUT we need pool of SerialExecutor, so that we can concurrently execute tasks of two or more Striped Queues
  • 20. Implementation Details 08 May 201320 1) Identification • Stripe: We are using Object as Stripe, you can define your own. 2) Maintain Order • With separate Queue based on Stripe. • SerialExecutor is maintaining a Queue 3) Sequential Processing • Handled by SerialExecutor 4) No Dependency • Handled by SerialExecutor
  • 24. Inside StripedExecutorService 08 May 201324 class SerialExecutor implements Executor { private BlockingQueue<Runnable> tasks = new LinkedBlockingQueue<>(); private Runnable active; private final Object stripe; private SerialExecutor(Object stripe) { this.stripe = stripe; }
  • 25. 08 May 201325 public void execute(final Runnable r) { lock.lock(); try { tasks.add(new Runnable() { public void run() { try { r.run(); } finally { scheduleNext(); } } }); if (active == null){ scheduleNext(); } } finally { lock.unlock(); } }
  • 26. Inside StripedExecutorService 08 May 201326 private void scheduleNext() { lock.lock(); try { if ((active = tasks.poll()) != null) { executor.execute(active); terminating.signalAll(); } else { removeEmptySerialExecutor(stripe, this); } } finally { lock.unlock(); } }
  • 27. 08 May 201327 private final ExecutorService executor; private final Map<Object, SerialExecutor> executors = new IdentityHashMap<>(); public void execute(Runnable command) { lock.lock(); try { Object stripe = getStripe(command); if (stripe != null) { SerialExecutor ser_exec= executors.get(stripe); if (ser_exec == null) { executors.put(stripe, ser_exec= new SerialExecutor(stripe)); } ser_exec.execute(command); } else { executor.execute(command); } } finally { lock.unlock(); } }
  • 28. Features 08 May 201328  Non striped tasks can also be handled with SES  Queues gets created when required  No memory leaks in terms of the Queues. Queues gets removed once all tasks are finished.
  • 29. Current State 08 May 201329  Work In Progress  Several other implementations available, but no one passes the tests written for StripedExecutorService  Performance
  • 30. References 08 May 201330  Delhi & NCR JUG  https://groups.google.com/d/forum/dncrjug  GitHub :  https://github.com/kabutz/striped-executor-service  Dr. Heinz Kabutz Newsletter  http://www.javaspecialists.eu/archive/Issue206.html  http://www.javaspecialists.eu/  Blog  http://chittoda.com