I have a hosted domain that includes web hosting and unlimited mailboxes. The cost is $5/month, plus the yearly fee for domain name registration. I mostly use the web hosting for image hosting. You can find even cheaper. The hosting service offers SpamAssassin filtering, which probably nixes 90%, but a significant amount still gets through. I use Thunderbird as my email client, which does some additional junk filtering of its own.
I keep three mailboxes. Each one has an address, but I never use that address, and instead use only aliases.
1. 'A' - Personal account used for friends, family, professional correspondence. Low risk of spam.
2. 'B' - Account used for things like forum memberships, online stores, responding to Craigslist. Medium risk of spam.
3. 'C' - Used for higher risk signups. Sketchy online stores, forums, etc. High risk.
The accounts allow me, after retrieving mail, to gauge their potential risk with regard to attachments and phishing schemes. I also have different 'real names' associated with each account in my email client. For 'A', my full name, for 'B', just my first name, and for 'C', something made up altogether. Needless to say, 'C' gets the most obnoxious spam, 'B' a bit less, and 'A' gets virtually none.
I keep multiple aliases (or 'forwarders') pointing at each account. If I find a particular email address begins to get a lot of crap, I just delete the forwarder. This means I never have to screw around with account settings in my email client. At worst, I have to re-register with some online stores or forums. Taking this approach to the extreme would be to create a new forwarder for every single signup, which would allow you to pinpoint the source of the spam (or the selling or leaking of your email address). That's a bit over the top, IMO, but I know people who do that.