При многопоточном программировании имеется несколько потоков, которые выполняют разные "программы", взаимодействующие друг с другом. Например, поток пользовательского интерфейса, поток вычислений, поток обработки ввода/вывода. Многопоточное программирование позволяет упростить (при адекватном подходе) архитектуру программы, но требует отдельных навыков при проектировании и отладке.
Параллельное программирование применяется для численных расчетов, или, например, в компьютерной графике. В этом случае "программа" одна, данные разные. Использование конвейеризации и большого количества вычислительных ядер позволяет получить значительный прирост в скорости вычислений.