嗨,我想知道如何在scala中测量线程池时间。
这是一个例子。
val pool = java.util.concurrent.Executors.newFixedThreadPool(2)
val start_time = System.nanoTime()
1 to 10 foreach { x =>
pool.execute(
new Runnable {
def run {
try{
Thread.sleep(2000)
println("n: %s, thread: %s".format(x, Thread.currentThread.getId))
}finally{
pool.shutdown()
}
}
}
)
}
val end_time = System.nanoTime()
println("time is "+(end_time - start_time)/(1e6 * 60 * 60))
但我认为这样做不正常。
有没有什么方法可以衡量时间?
答案 0 :(得分:1)
您的代码段中有许多主题。
主线程创建10个线程完成其工作并打印时间。它不会等待所有并行线程完成。 你需要做的是等待所有线程的结果,然后才进行总时间计算。
我建议您稍微了解Future
的概念,以便您正确等待结果。
所以你的代码可能如下:
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent._
import scala.concurrent.duration.Duration
val start_time = System.nanoTime()
val zz = 1 to 10 map { x =>
Future {
Thread.sleep(2000)
println("n: %s, thread: %s".format(x, Thread.currentThread.getId))
}
}
Await.result(Future.sequence(zz), Duration.Inf)
val end_time = System.nanoTime()
println("time is " + (end_time - start_time) / (1e6 * 60 * 60))
我使用了默认的全局scala线程池。