Есть ли специфичный для Scala способ реализации периодического выполнения? - PullRequest
5 голосов
/ 07 июля 2010

АКА делает что-то с установленными интервалами.

Например, допустим, я хочу сканировать определенный каталог каждые 60 секунд.

В Java я бы использовал ScheduledExecutorService примерно так:

Executor pool = Executors.newScheduledThreadPool(10)
pool.scheduleAtFixedRate(scanner, 0, 60, TimeUnit.SECONDS)

и это прекрасно работает.

Дело в том, что я думаю, что я хотел бы попробовать использовать актеров Scala в моей программе, но я немного запутался в том, как комбинировать актеров и исполнителей Java, или должны ли они быть.

Полагаю, возможно, у меня мог бы быть простой бегун, который просто отправлял бы актеру сообщение каждые N секунд - имеет ли это смысл?

Ответы [ 2 ]

2 голосов
/ 07 июля 2010

Полагаю, возможно, у меня мог бы быть простой бегун, который просто отправлял бы актеру сообщение каждые N секунд - имеет ли это смысл?

Да, и подумал бы об использовании Akka для актеров с помощьюпуть.У него более простой API, лучшая производительность и много вкусного.

0 голосов
/ 07 июля 2010

Вы можете попробовать Scala Executor вместо Java.

Объект, который выполняет отправленные java.lang.Runnable задачи.
Этот интерфейс позволяет отделить представление задачи от механизма выполнения каждой задачи, включая сведения об использовании потока, планировании и т. Д.
Executor обычно используется вместо явного создания потоков. Например, вместо того, чтобы вызывать new Thread(new(RunnableTask())).start() для каждого набора задач, вы можете использовать:

 Executor executor = anExecutor;
 executor.execute(new RunnableTask1());
 executor.execute(new RunnableTask2());
 ...
...