播放Http.Context实现

时间:2014-09-03 18:46:12

标签: java playframework playframework-2.0

有谁知道如何实现Http.Context.current()?这是一个静态方法,我在非静态方法中使用,在非控制器方法中,在非单线程应用程序中使用,并且它工作得很好。我问自己......怎么样?

我很好奇它是如何在内部工作的,因为Play没有每个请求的一个线程模型,并且他们是如何做到这一点很有趣。

1 个答案:

答案 0 :(得分:1)

如果查看实现,可以看到当前值保存为ThreadLocal值,因此它存储在当前线程中: https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/java/play/mvc/Http.java

但是如何在Futures中访问它可能在其他线程上运行呢?有一个名为HttpExecutionContext的特殊执行上下文,它将捕获上下文以便它可用,你可以在这里看到它: https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/java/play/libs/HttpExecution.java

如果您开始使用自己的线程池并对其进行操作,尽管您可能会泄漏线程之间的上下文并导致各种奇怪的问题。