Synchronization of tasks is the coordination between those tasks to get the desired results. In concurrent applications, we can have two kinds of synchronizations:
- Process synchronization: We use this kind of synchronization when we want to control the order of execution of tasks. For example, a task must wait for the finalization of other tasks before it starts its execution.
- Data synchronization: We use this kind of synchronization when two or more tasks access the same memory object. In this case, you have to protect the access in the write operations to that object. If you don't do this, you could have a data race condition where the final results of a program vary from one execution to another.
The Java Concurrency API provides mechanisms that allow you to implement both types of synchronization. The most basic synchronization mechanism provided...