Init commit for task 4.
Implement simple solution with synchronized blocks.
Add more informative logs.
Interrupt threads for proper program termination.
Extract time to wait in the constant.
Extract producer consumer constructor's logic to super class.
Extract classes.
Remove rubbish.
Terminate thread lifecycle via proper catching interrupted exception.
Extract boilerplate code to superclass.
User direct method.
Import static methods.
Add 4th task to Main class for executable jar.