When you execute
ForkJoinPool, you can do it in a synchronous or asynchronous way. When you do it in a synchronous way, the method that sends the task to the pool doesn't return until the task sent finishes its execution. When you do it in an asynchronous way, the method that sends the task to the executor returns immediately, so the task can continue with its execution.
You should be aware of a big difference between the two methods. When you use the synchronized methods, the task that calls one of these methods (for example, the
invokeAll() method) is suspended until the tasks it sent to the pool finish their execution. This allows the
ForkJoinPool class to use the work-stealing algorithm to assign ...