It really depends on what kind of parallel programming you would like to learn about. It is a vast topic and difficult to master. Parallel programs are difficult to debug and even if you implement one correctly, odds are that the program is slower than a sequential version.
Learning about "parallel programming" in general is almost impossible, although Patterns for Parallel Programming gives a nice introduction. Reading that book will not be enough to learn how to actually write parallel programs though. I would recommend that you pick a sub-topic and stick to that, at least for a while.
These are some interesting sub-topics:
GPU-programming
Message-passing parallel programming in Erlang or using MPI.
Shared memory parallel programming using OpenMP or something similar.
Low-level shared-memory parallel programming using threads and locks. I would not recommend this for production code though, since you are most likely better off using a higher level library. It can teach you a lot though.
For a theoretical mathematical angle, take a look at Principles of Model Checking.
Parallel programming is also a very active research topic, with work being done on Fortress, software transactional memory and many other interesting things.
The Glasgow Haskell Compiler includes some very interesting extensions, but I don't think parallel Haskell is something you will see in your average project any time soon.
A word of warning: I decided to learn about parallel programming because I too had heard
a lot of hype about it. I have spent a lot of time on the subject and I am still nowhere near an expert. What I do know is that most of your previous programming experience is pretty useless in this domain. Parallelisation is no quick fix and if you are just looking
for a quick way to speed up your code, you are probably better off learning more about sequential optimisation techniques.