Concurrency is when two or more tasks can start, run, and complete in
overlapping time periods. It doesn't necessarily mean they will ever both be
running at the same instant. Eg. multitasking on a single-core machine.
Parallelism is when tasks literally run at the same time, eg. on a multicore
processor.
Quoting Sun's Multithreaded Programming Guide:
- Concurrency: A condition that exists when at least two threads are
makingprogress. A more generalized form of parallelism that can include
timeslicing as a form of virtual parallelism.
- Parallelism: A condition that arises when at least two threads
areexecuting simultaneously