java - Play Http.Context 实现

标签 java playframework playframework-2.0

有谁知道 Http.Context.current() 是如何实现的?这是一个静态方法,我在非静态方法、非 Controller 方法、非单线程应用程序中使用它,并且效果很好。我问自己...如何???

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

最佳答案

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

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

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

关于java - Play Http.Context 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651530/

相关文章:

java - 什么是阻塞 I/O 操作的线程状态

json - Play Framework : How to serialize/deserialize an enumeration to/from JSON

java - 没有用户登录时存储购物车(playframework 疑问)

java - 在 Scala 中将 java.io.File 转换为 java.sql.Blob

java - JVM 是如何决定 JIT 编译方法的(将方法归类为 "hot")?

java - Android调试器和JSOUP : Source not found

java - 在 Java 中连接 RowFilter orFilters 与 andFilter

eclipse - 输入play eclipsify命令显示错误 "No such file or directory"

java - 在 Scala Java Play 框架中格式化没有小数的 double 并为千位添加逗号

java - 如何将我的 Play Web 应用程序部署到我的服务器上