Прежде всего, я думаю, что есть проблема в groovy service классе с аннотацией @Transnational
, которая не позволяет вызвать метод run () интерфейса Runnable. Если вы удалите @Transnational
, он вызовет метод run (). Это случилось и в моем случае. Но я не уверен, может быть какая-то другая причина. Вы можете напрямую использовать:
ExecutorService threadPool = Executors.newFixedThreadPool(13)
threadPool.execute(new Runnable() {
@Override
void run() {
Thread.sleep(5000);
someMethod()
}
})
Extra (Как я читаю ваш вопрос)
Если вы используете несколько потоков в одном и том же методе, он может быть сложным, поскольку все потоки будут использовать одни и те же локальные переменные этого метода, что может привести к проблемам. Лучше использовать несколько потоков для разных разных работ.
Но если вы хотите использовать один и тот же метод для выполнения нескольких потоков, то в моем сценарии лучше использовать Executors.newSingleThreadExecutor()
.
ExecutorService threadPool = Executors.newSingleThreadExecutor();
newSingleThreadExecutor () вызывает один поток, поэтому, если вы хотите выполнить несколько задач в нем, он не создает несколько потоков. Вместо этого он ожидает завершения одной задачи, а затем запускает следующую задачу в том же потоке.
Скорость: newSingleThreadExecutor по сравнению с несколькими потоками будет медленным, но безопаснее в использовании.