Whoever invented the "terrible two's" never had a 3 year old. Three is the worst. As I write this, my 3 yo foster child is screaming his lungs out because he wants a cookie. Not crying......shrieking.
I've raised 3 kids into their teens now, and work with Birth to 5 year olds who have developmental disabilities. I have read and tried all the tactics - and this is the only one that works:
IGNORE. Never ever give in to a tantrum. Don't even give him eye contact. Be consistent. Whatever decision you make - stick with it regardless of his actions. Give choices when possible - but only when you can follow through with whatever choice he makes. At first it's hard to ignore the behavior - but it actually gets quite easy. In a public place - if he starts screaming - I take him to the restroom and sit him on the floor (yuck) or I strap him in his car seat and wait outside the car for him to stop. If he can't stop, we go home. At home, I just walk away from him when he starts the screaming. If he becomes destructive with his tantrum, I put him on the time out rug (no eye contact, no conversation) and I keep putting him back there until he's done.
Certainly there are triggers to tantrums that need to be avoided - fatigue and hunger. If those needs are met, then the fit deserves no recognition whatsoever. When he's done, we move on.
This will pass. He will be the sweetest 4 and 5 year old ---------believe me. At 15 / 16 ........well..........the tantrums start up again but this time he will have words.
Best wishes.