Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Restricting thread count and Java concurrency

I couldn't find an example of this specific case using the latest JAVA concurrent routines.

I plan to use threads to process items from an open queue which may contain 0 to thousands requests. I want to restrict so at at any given time there be no less than 0 and no more than say 10 threads handling queue items.

Is there a Java concurrent process geared towards this specific type of case?

like image 875
David Loy Avatar asked Oct 21 '25 01:10

David Loy


2 Answers

I think a thread pool is what you are looking for. Take a look at ExecutorService and Executors.

ExecutorService : http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html

Executors : http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html

Getting a new Thread fixed thread-pool that processes max. 10 Thread at once :

ExecutorService threadPool = Executors.newFixedThreadPool(10);

With the submit Method you pass Callables or Runnables to the Pool.

For your use case you need a process that looks into the Queue, if there is a new request a Callable or Runnable has to be created and passed to the thread-pool. The pool ensures that max. 10 threads are executed at once.

This is a very small tutorial : http://www.math.uni-hamburg.de/doc/java/tutorial/essential/threads/group.html

A nice thing working with thread-pools is that the submit method returns a Future object, which supports return types for the executed threads.

Future : http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html

I hope this helps you to solve your problem.

like image 140
Don Avatar answered Oct 23 '25 15:10

Don


I had the same task: I used the BlockingQueue of the java.util.concurrent package. I created X worker threads which reads one action from the queue, processes it, and when ready take the next. This is simple, and it works fine.

If you use X = 10 Worker threads, then your task is solved.

like image 39
AlexWien Avatar answered Oct 23 '25 15:10

AlexWien



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!