akka提供了兩個關於時長的數據類型:Duration 和 Deadline,好比5秒鐘這種含義。java
Duration.Inf表示無限,Duration.MinusInf表示負無限spa
Deadline, 表示一個絕對的時間點,意義是最終期限,而且支持經過計算當前時間到deadline之間的差距來生成Durationit
下面是使用方法:io
import akka.util.Duration
import java.util.concurrent.TimeUnit
import akka.util.FiniteDuration
import akka.util.Deadline
import akka.dispatch.Await
import akka.dispatch.Futures
import java.util.concurrent.Callable
import akka.dispatch.Future
import akka.actor.ActorSystemclass
class DurationTest extends GroovyTestCase {
def testDurationUse() {
println new FiniteDuration(5, TimeUnit.SECONDS)
println Duration.create(5d, TimeUnit.SECONDS)
println Duration.create(5, "second")
println Duration.create(5L, "second")
println()
println Duration.parse("5second")
println Duration.parse("5 second")
println Duration.parse("5 seconds")
println Duration.parse("5seconds")
println()
println Duration.Inf()
println Duration.Zero()
println Duration.MinusInf()test
}import
def testDeadline() {
Deadline d = Duration.create(5, "second").fromNow()
def future = Futures.future(new Callable<String>() {
String call() {
println "start...";
sleep(1000 * 60);
println("end...");
return "sd";
}
}, ActorSystem.create("test").dispatcher())數據類型
String result = (String) Await.result(Futures.future({println "start..."; sleep(1000 * 60); println("end..."); return "sd";} as Callable, ActorSystem.create("test").dispatcher()), d.timeLeft())
sleep(1000 * 60)
}方法
def testDeadline2() {
Future<String> f = Futures.future(new Callable<String>() {
public String call() {
return "Hello" + "World";
}
}, ActorSystem.create("test").dispatcher());
String result = (String) Await.result(f, Duration.create(5, "second"));
println result
}
} im