You may need to set more strict boundaries, be direct, assertive and consistent. I read a book called 1-2-3-Magic. It helped me create a discipline routine that I could stick to without becoming stressed. It addressed serious behavior issues and little things from infancy to teenage years.
You need to get down face-to-face, be direct, firm and assertive. Give shortly phrased directions. Explain ramifications. Give him opportunities to think it through and make good decisions. For dangerous activities I react immediately with stricter punishments. For things such as following directions, picking up toys, obeying, you can use the aforementioned suggestion. After giving the direction and telling him he will have timeout or whatever punishment, start counting to 3. Give him maybe 5 seconds before giving him another count. Once you get to 3 if he isn't running to follow your request, then he gets a punishement. This requires a great amount of effort to maintain consistency, enforcing him to stay in timeout and then releasing him. When he makes good decisions, give immediate praise. When he changes his direction when beginning to count, give immediate praise. Encourage him consistently on making good decisions, being helpful, being kind.
Explain to him better ways of dealing with situations, talking about his emotions and coming to you when upset or frustrated. When he's mad, tell him to use his words to say, "I'm angry"... and then tell you why he's angry. When he's says he's angry, tell him it's okay to be upset. Help him find other ways of expressing him disappointment and anger. If someone is picking on him or he wants something he can't have, then he needs to use his words, be kind-polite-compassionate, and then find an adult for help. If he's upset, let him cry it out and say you understand, it's okay to be upset, but it's not okay to hit, take things, not share, throw things and disobey.
I try to help my boys to use their words, learn how to distract their attention to doing something else, burning off energy by playing outside and even encouraged them to punch pillows or throw pillows on the bed in their room. I let them sit by themselves and think about it to cope and deal with the frustration. I don't let them sit pouting too long. I tell them it's not okay to pout, make faces, say mean things, call names, etc.
I don't tell my kids they are bad. I tell them they need to make better decisions the next time. I talk to them about others' actions, books, cartoons and movies and indicate whether a person was making a good or bad decision, evaluate how those actions made the person feel, and whether those things are nice or mean, whether the girl on TV felt good when the other girl shared with her or whether she was sad. I tell my boys that they can have more fun when they share and take turns. I teach them that it feels good when someone gives them a hug, tells them they are a good boy, shares, etc. I try to help them know they can help others feel good too.
I have seen my 4 year old go from being rather selfish, a bully, acting out, throwing things, tantrums and hitting to going out of his way to help pick things up, encourage others when they are sad, give hugs and pats on the back to complete strangers for encouragement, going out of his way to share snacks with neighbor kids (even candy!), being very gentle with animals and following directions. He tries a lot harder to make good decisions because he knows that the encouragement, rewards, sharing and compassion make him feel good and others feel good. I've taught my son better ways to share and to get others to share with him. He has started to get out some of his toys and trades with the neighbor kids so he can play with their toys. Both kids are happy, and he's learning to problem solve.