![]() |
![]() |
![]() |
![]() |
![]() |
|
Multithreaded programs may require synchronization, which is a way of ensuring that two methods will not run at the same time with the same class instance as their target.
One classic example is that of bank-account deposits and withdrawals. If
you have different threads call deposit and withdraw methods
on the same bank-account instance, there is a chance that both methods will
fetch the current balance from an instance variable before either method
performs the appropriate addition or subtraction. Thus, one method may work
on an out-of-date balance, as illustrated by the following event sequence,
producible by two threads running deposit and withdraw
methods on the same bank-account instance at the same time:
Deposit thread Withdraw thread
-------------- ---------------
Fetch current balance, 100
Fetch current balance, 100
Add 10 to 100,
Write balance, 110
Subtract 10 from 100
Write balance, 90