Lets assume 3rd Reader thread executes before calculator thread and enters wait on calc.
then calculator executes.
then why Reader thread not keep waiting due to wait() ?
If the assumption is that the 3rd Reader starts to execute before the calculator thread and it enters wait on calculator and then the calculator thread executes and completes and sends the notifications, then why should the Reader thread keep waiting? The scope of the synchronization block is only till the notifications are sent. Hence after notifying, the synchronization lock would be released.
The reader thread would have received the notification after calculator thread completed and returned from the wait state after acquiring the synchronization lock again.