The following screenshot shows the output of the new version of the example. No matter how many times you execute it, you will always obtain the correct result:
Let's see the different uses of the synchronized keyword in the example:
- First, we protected the vehiclePay() method. If two or more Sensor tasks call this method at the same time, only one will execute it and the rest will wait for their turn; therefore, the final amount will always be correct.
- We used two different objects to control access to the car and motorcycle counters. This way, one Sensor task can modify the numberCars attribute and another Sensor task can ...