Темы вы можете использовать здесь.Создайте класс исполнителя, отвечающий за выполнение задачи.Сделай вызов.Таким образом, вы сможете получить результат в будущем.
Используйте BlockingQueue для задачи, чтобы сохранить и выбрать из нее (вы должны из-за процессора, то есть двух / 4 ядер).
Используйте Runtime Class, чтобы получить доступные ядра, и запустите поток в core-1.Номер потока = Доступные ядра-1.
для отмены, вы можете использовать флаг, который сопоставлен с соответствующим сохраненным потоком.Проверьте этот флаг и вернитесь, если поток запущен в любой момент времени