Об этом уже упоминалось, но для ясности: создание нового объекта Thread только для вызова его метода run () излишне дорого и должно быть серьезным красным флажком. Было бы намного лучше, с большей развязкой создать Runnable impl и либо (а) вызвать его метод run () напрямую, если это желаемое поведение, либо (b) создать новый поток с этим Runnable и запустить поток.
А еще лучше, для еще большей развязки, ознакомьтесь с Executor
интерфейсом и фреймворком в JDK 5 и новее. Это позволяет вам, в двух словах, отделить выполнение задачи (экземпляр Runnable) от того, как она выполняется (реализация Executor, которая может выполнять Runnable в текущем потоке, в новом потоке, используя существующий поток из пула, и что "нет).