I get interrupted frequently with phone calls, quotes for sales on more technical items, project managers asking me about feasability and time constraints, and junior developers asking for assistance with problem solving issues.
I've found the following, while not as ideal as being able to shut the office door and be left alone for hours on end, to be the most effective:
Install the Firefox add-on "LeechBlock" and add your most commonly used websites there. You could set a time-limit (i.e. 5 minutes every two hours) so you don't completely shut yourself off.
Wear headphones if you work in a cubicle or are busy.
Put your phone on do not disturb.
Turn off your email client and only open it at certain times (i.e. 11am, 3pm).
Ask co-workers to only see you during certain times as a courtesy (i.e. 11am, 3pm) but say you will still be available for emergencies.
Group as many like-tasks as possible together (i.e. Do maintenance tasks from 4pm to 5pm each day) and leave the remainder of your day for project work.
It's not ideal, but this is the best solution I have found.