My DS1 is also 3.5 years old and we started doing the sharing thing early on--we used "taking turns" in the beginning since sharing isn't an easy concept to grasp, but taking turns is. When other kids come over to play, I prep DS1 ahead of time and say something to the effect of: these kids are coming over to our house and they aren't bringing any of their toys. You'll need to share your toys with them so they have something to play with. If he has a toy he doesn't want to share, I tell him to take it to his room.
This usually works pretty well, although I have to remind him now and again, "remember what we talked about, these kids didn't bring any of their toys to play with." When he was a little younger, and he and a kid would fight over a toy, I would say, (when the "turns" things wasn't happening) "if you cannot play nicely with this toy, I will take it away." Usually DS1 would say, okay, X can play with it. Of course I did (and still do) have to remind DS1 that none of his toys will leave our house--no kid will take any of it home. That seems to help, too.
When DS wants to play with another kid's toy at their house, and they don't want to share, I tell DS1, that toy belongs to X and he doesn't want to share, can you find something else?
Usually, this keeps the crazy blow-up tantrums non-existant.
Kristin