Yes. Apache2 is multi-threaded. However that does not mean that it is optimized for multiple-cores. I can't comment on Apache2 but I do know that often there is an overhead to using a different core (because of memory transfers etc.)
There has been a lot of progress made in the last few years in getting more use out of those multiple cores. An interesting project is http://openmp.org/wp/about-openmp/. I belive that gcc 4.3.2 has support for some of the pragmas with the -fopenmp option.
Managing resources across cores is a relatively new challenge and will require new ways of programming to conquer.