Thank you for responding. You obviously have a very strong willed child and honestly there is not a great deal you can do at this point but DO NOT GIVE IN. You have to be consistent and persistent no matter how stressful. Your son is having tantrums because he does not know how to express himself and his frustration. Give him words. Even at your son's age, children can sense your emotions and feelings. When at home, and your son has a tantrum, walk away. Just leave the room and your son will get bored in throwing a tantrum if he does not have the attention. He only wants to control the situation with his tantrum. You are not a bad parent and your son is not a bad child. Just relax and breathe. If you need to, install a child gate so that you can leave your child in his room when you walk away. When you are in public and your child acts up, grab his arm firmly and tell him "NO". You need to get down on his level and look directly into his eyes focused on his face. You need to have a stern look. That way, your son is less likely to mock you or laugh at you.
Your son needs your direction through both positive affirmation and negative consequences. Your son needs to learn and associate "NO" with discomfort. I do not advocate spanking, but a tight squeeze of the arm or a pinch while in public gets his attention to settle down and that you mean business.
Do not give up. You have the power to change your son. He is still young!!!