java wait inside synchronized block