Thread и Runnable были частью Java 1.0; они так же хороши, как и тогда.
Новые классы параллелизма получают все, что узнали о многопоточности с тех пор (спасибо, Даг Ли и другие). Написание многопоточного кода ужасно сложно. Новые классы параллелизма, включая SwingWorker, пытаются упростить это.
Начните с обозначения обобщений для строгой типизации. Встроен механизм публикации и обработки как окончательных, так и промежуточных результатов.
Можно было бы имитировать их с помощью Thread и Runnable, но SwingWorker сделал это для вас.