Future知识点讲解
- 因为刚开始接触Future,这里参考一片文章,简单的只放链接好了,因为没有具体研究,后面讲些自己的心得。
https://www.jianshu.com/p/f858d31877c3
Future 心得
- 执行情况
在Future创建的时候就会利用上下文或者执行的线程池执行Future中的代码块,而不是要等到调用的时候,这个经过代码测试。 - 调用future的回调函数,回调函数的执行线程是执行Future代码的线程池。
-上代码
@Test
def futureCreateTest(): Unit ={
println("time1: " + System.nanoTime())
println("thread1: " + Thread.currentThread().getName)
val f = Future{
println("thread2: " + Thread.currentThread().getName)
println("time2: " + System.nanoTime())
Thread.sleep(2000)
println("time3: " + System.nanoTime())
1 + 1
}
println("thread3: " + Thread.currentThread().getName)
println("time4: " + System.nanoTime())
Thread.sleep(1000)
val result = Await.result(f, 1 second)
println(result)
Thread.sleep(5000)
f.onComplete{
case Success(value) =>
println(s"Get callback success, meaning value = $value")
println(s"callback function's thread: ${Thread.currentThread().getName}")
case Failure(exception) => exception.printStackTrace()
}
// 这里主线程休息5s保证在程序推出前,回调函数执行完毕。
Thread.sleep(5000)
执行情况
time1: 91580332028084
thread1: main
thread3: main
time4: 91580408190989
thread2: ForkJoinPool-1-worker-5
time2: 91580408607023
time3: 91582408847026
2
Get callback success, meaning value = 2
callback function's thread: ForkJoinPool-1-worker-5
说明:只是参考下方链接自己做了思考然后动手做了验证,因为时间仓促,可能有不足或者失误地方,读者可以指出,后期有时间将会更新。
参考链接:https://www.jianshu.com/p/f858d31877c3
网友评论