the requirement number 6th is not met and I have no idea how to chagne it . Any ideas ? and why so ? here is my another idea : public void run() { Iron iron = takeIron(); synchronized(iron){ Clothes clothes = takeClothes(); iron(iron, clothes);} returnIron(); } this doesn't work too :( output seems good tho