Stay strong, parenting is hard work. Keep the timeouts, but most important be consistent with it. This is hard as we are only human, but it will go a long way.
Tell him that he will stay in time out until he stops crying, and stand by this, and no more talking to him until he stops screaming, totally ignore him, don't even look his way. When he stops then ask him if he knows why he was in time-out and he will know. Ask him to apologize and then a big hug and an I love you. Be consistent, never give in to him. As for the candy, I would tell him that he can get the candy, and hold it until after lunch, at which time he can eat it. If at any time he tries to eat it, tell him if he can't wait until after lunch and be a good boy, you will take the candy away and do it. Then you must follow thru, he will learn real quick that you mean what you say. He will learn that when he behaves appropriately, good things happen, and visa-versa. The same for screaming on his way home, time-out as soon as you get home, no arguing. Take away things for punishment, TV, a favorite toy etc. But also reward him for good behavior with stickers, and such. My grandson just turned 3 in January and sometimes does the same thing, but my daughter will take away whatever he wanted and leave it at the store, and if he screams all the way home, he has to stay in his room until he stops crying. He then will come out on his own and apologize, and she has the talk with him. If he wants candy, she will use it as a bribe to keep him quiet thru shopping and dinner, as he knows after he eats he gets the candy. Hope this helps...