2010-07-07 42 views
5

AKA以設定的時間間隔做某事。是否有Scala特定的方式來實現定期執行?

例如,假設我想每60秒掃描一次某個目錄。

在Java中,我會用一個ScheduledExecutorService像這樣:

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

和工作正常。

事情是,我想我想嘗試在我的程序中使用Scala actors,但是我對如何結合actor和Java Executors或者它們是否應該是有點困惑。

我想也許我可以有一個簡單的跑步者,它只會發送一條消息給演員每N秒 - 這是否有道理?

回答

2

我想也許我可以有一個簡單的跑步者,它只會發送消息給一個演員每N秒 - - 那有意義嗎?

是的,並考慮使用阿卡爲演員的方式。它有一個更簡單的API,更好的性能,並有很多美味的東西。

+0

我絕對願意使用Akka,但我有點困惑......如果演員是Scala的重要組成部分,並且Akka的API和實現更好,那麼爲什麼它不被整合到Scala本身中呢?我只能推測社區中存在這樣的衝突。 – 2010-07-07 12:41:17

+4

演員impl。與Scala一起發貨並不是語言的一部分,它就是這樣的感覺。 Akka不能替代Actor impl。因爲它們沒有相同的API,所以隨Scala一起發貨。 像Guy Steele會說的那樣:你不能把每個好的框架都放到語言中,更好地讓每個用戶做出決定。 Akka是您如何擴展(擴展)Scala和Scala擴展的完美例子。 但是有計劃把STM加入Scala。如果你不想等待,你可以在Akka中使用STM。 – 2010-07-07 21:09:49

+0

非常感謝Olle,非常有幫助。 但事實上,考慮到默認實現「只是」一個庫,這讓我更加好奇爲什麼不用Akka來替換它? 我想我是說,有什麼優點和缺點?必須有一些默認實現的優點,否則它不會保持默認。 – 2010-07-07 22:58:00

0

你可以嘗試Scala Executor本身,而不是Java的。

執行提交的java.lang.Runnable任務的對象。
該接口提供了一種將任務提交與每個任務如何運行的機制解耦的方式,包括線程使用的細節,調度等。
通常使用Executor而不是顯式創建線程。例如,而不是調用new Thread(new(RunnableTask())).start()每個一組任務,你可以使用:

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

謝謝,但看起來它只是一個界面。我在官方的Scala 2.8 API文檔中找不到這個包。 – 2010-07-07 12:38:48

相關問題