Java Executor service examples to run concurrently and sequentially with strategy design pattern - part 1
This is a three part series on Java executor framework for running multi-threaded applications.
Part 1: Running concurrent threads
Part 2: Running sequential threads
Part 3: Creating a strategy class using the strategy design pattern to be able switch between running concurrently and sequentially.
package com.writtentest13;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Tasks are executed concurrently in a thread pool
*/
public class ThreadExecutorMainCon {
private ExecutorService concurrentThreadExecutor;
public static void main(String[] args) {
ThreadExecutorMainCon main = new ThreadExecutorMainCon();
// concurrent executor
main.concurrentThreadExecutor = Executors.newCachedThreadPool();// or
// newFixedThreadPool(3)
List<Callable<Boolean>> tasks = new ArrayList<Callable<Boolean>>();
// create dummy tasks
for (int i = 1; i <= 5; i++) {
tasks.add(main.createTask(i));
}
// submit the tasks to the concurrentThreadExecutor
try {
main.concurrentThreadExecutor.invokeAll(tasks);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Completed .........");
}
private Callable<Boolean> createTask(final int i) {
Callable<Boolean> task = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
System.out.println("Performing task " + i + " on thread - " + Thread.currentThread().getName());
return true;
}
};
return task;
}
}
The output will be
Performing task 1 on thread - pool-1-thread-1 Performing task 5 on thread - pool-1-thread-4 Performing task 4 on thread - pool-1-thread-1 Performing task 3 on thread - pool-1-thread-3 Performing task 2 on thread - pool-1-thread-2 Completed .........
You can see more than 1 thread process 5 tasks concurrently. Try changing the Executors.newCachedThreadPool () to Executors.newFixedThreadPool(3) for max 3 threads to execute concurrently. In the next post, we will look at running the task sequentially in the current thread, which involves more coding.
Labels: Multi-threading
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home