What is fork Join framework in Java: Already popular project coin of JDK7 release has presented a lot of good features e.g automatic resource management, string in switch case, better exception handling in JDK7, etc. Another important feature to note is fork-join as the name implies it divides one task into several small tasks as a new fork means child and joins all the forks when all the sub-tasks are complete.
Fork/join tasks are “pure” in-memory algorithms in which no I/O operations come into the picture.it is based on a work-stealing algorithm. The concept of fork-join would be much clear by the following diagram.
How Fork Join Framework comes in existence
Java’s most attractive part is it makes things easier and easier.for doing things faster java has given us concurrency concept but dealing with concurrency is not easy because we have to deal with thread synchronization and shared data.
When we have to work with a small piece of code it is easy to handle synchronization and atomicity, but it becomes for complex when code base and the number of threads increased, it's really challenging where several threads are working together to accomplish a large task so again java has tried to make things easy and simplifies this concurrency using Executors and Thread Queue.
When we have to work with a small piece of code it is easy to handle synchronization and atomicity, but it becomes for complex when code base and the number of threads increased, it's really challenging where several threads are working together to accomplish a large task so again java has tried to make things easy and simplifies this concurrency using Executors and Thread Queue.
When we compare Executors with old Thread it has made the management of concurrent task very easy and it works on divide and conquer algorithm and create sub-tasks and communicate with each other to complete.
But The problem with the executor's framework is that a Callable is free to submit a new sub-task to its executor and wait for its result in a synchronous or asynchronous fashion.
The issue is that of parallelism: When a Callable waits for the result of another Callable, it is put in a waiting state, and thus wasting an opportunity to handle another Callable queued for execution.
But The problem with the executor's framework is that a Callable is free to submit a new sub-task to its executor and wait for its result in a synchronous or asynchronous fashion.
The issue is that of parallelism: When a Callable waits for the result of another Callable, it is put in a waiting state, and thus wasting an opportunity to handle another Callable queued for execution.
To solve this issue java 7 has given the concept of parallelism. The new fork-join framework has been added in java.util.concurrent package. A new fork-join executor framework has been created which is responsible for creating one new task object which is again responsible for creating a new sub-task object and waiting for the sub-task to be completed.
Internally it maintains a thread pool and executor assign a pending task to this thread pool to complete when one task is waiting for another task to complete. the whole Idea of the fork-join framework is to leverage multiple processors of advanced machines.
Btw, if you are serious about mastering Java multi-threading and concurrency then I also suggest you take a look at these Java Multithreading and Concurrency Courses from Udemy, Coursera, and other popular websites. It's an advanced resource to become an expert in Multithreading, concurrency, and Parallel programming in Java with a strong emphasis on high performance
Internally it maintains a thread pool and executor assign a pending task to this thread pool to complete when one task is waiting for another task to complete. the whole Idea of the fork-join framework is to leverage multiple processors of advanced machines.
Btw, if you are serious about mastering Java multi-threading and concurrency then I also suggest you take a look at these Java Multithreading and Concurrency Courses from Udemy, Coursera, and other popular websites. It's an advanced resource to become an expert in Multithreading, concurrency, and Parallel programming in Java with a strong emphasis on high performance
How to code using the fork-join framework:
Fork-join functionality is achieved by ForkjoinTask object, it has two method fork() and joins () Method.
- The fork() method allows a new ForkJoinTask to be launched from an existing one.
- The join() method allows a ForkJoinTask to wait for the completion of another one.
Again ForkjoinTask object has been of two types: RecursiveAction and RecursiveTask which is a more specialized form of this instance. While RecursiveAction represents executions that do not yield a return value, Instances of RecursiveTask yield return values.
I will try to add a suitable example for fork-join framework once I get some time, I am still looking for a decent example which best-suited fork-join framework.
Some of my other tutorials in Java
How to implement Thread in Java ? Example of Runnable interface
Difference between ConcurrentHashMap and Collections.synchronizedMap and Hashtable in Java
How Synchronization works in Java, synchronized block and method
What is Abstraction in java?
How to convert String to int in Java?
Difference between ConcurrentHashMap and Collections.synchronizedMap and Hashtable in Java
How Synchronization works in Java, synchronized block and method
What is Abstraction in java?
How to convert String to int in Java?
fork join in Java7 looks little complex to me, does it only going to apply on problem which works on map reduce kind of concept, I mean where you can break the task in smaller part and than aggregate output? Can you also point some more resources on fork join framework in JDK7?
ReplyDeleteThanks for sharing fork join example, I was looking for a rather simple example of fork-join its indeed difficult to test until you have mulit processor system. Can you please write how you tested your fork join program in Java7
ReplyDeleteThanks for overview of the fork join API. Keen to see an example with proof that it is get some performance improvements! What is memory and other resources overhead? Thanks.
ReplyDeleteIts a good place to learn ..!!!!
ReplyDelete