I have struggled with this same problem at a few jobs.  
I've observed that there is a type of programmer who can survive in this environment:  one who simply works on whatever the boss says is the priority of the moment, and doesn't worry about deadlines at all.  Just keep putting things on the back burner, and resume working on them the next time the boss asks for it.  Endure the occasional tirade from your boss when something he asked you to start 12 months ago isn't done yet, because you've been working on whatever he gives you.
If you aren't comfortable with that sort of existence (and I would not be), then the best strategy I can suggest is that you have an open conversation with your boss about it:
  It's important to me to do a good job,
  but I feel like the work requests are
  coming in faster than I can complete
  them.  I know that priorities
  inevitably shift, so I'd like some
  help from you to understand when this
  happens, and how to balance my time
  among the tasks to best meet your
  needs.  Can we talk about how to stay
  in sync about priorities?
  
  If the tasks can't be prioritized,
  then I need you to understand that I
  can't be productive on so many tasks
  at once.  It's just not humanly
  possible.  Have you considered hiring
  additional programmers so we can
  balance the workload and get it all done
  in a timely way?
If he tries to stall or contradict or tells you to "work smarter, not harder" then you can escalate:
  Let me put it another way:  if you continue to give me tasks at the rate you have been, but don't prioritize them clearly, then you are going to hire another programmer.  Whether this hire is your second programmer, or else my replacement, is up to you.
Basically, communication is good.  Start by being diplomatic and phrasing everything in terms of how you contribute to his success.  But increase the degree of bluntness until it sinks in.