【发布时间】:2012-08-24 17:20:18
【问题描述】:
我有一个 true 的 java appengine 应用程序。我知道多个线程将在处理多个并发请求的单个实例上运行。我知道代码必须是线程安全的,即没有全局静态变量。
我不明白的是线程是否在请求结束时被杀死,或者同一线程是否可以在处理完另一个传入请求后用于处理另一个传入请求。
为什么这很重要?一些细节:
我有一个带有线程局部变量的静态类:
public abstract class Foo {
private static final ThreadLocal<Boolean> threadIsApiCall = new ThreadLocal<Boolean>();
static {
setIsApiCall(false);
}
}
这个变量存储当前对该线程的请求是调用我们的rest api还是来自我们自己的自定义客户端的调用。只有在匹配我们的 api 路径的过滤器运行时,才会设置此变量。我遇到的问题是,如果向我们的 API 发出请求,并且 threadlocal 变量设置为 true,那么在后续请求(不是 api 请求)上,threadlocal 变量仍设置为 true。您会怀疑它会因为静态初始化程序而设置为 false。仍然可以将其设置为 true 的唯一方法是,如果初始化程序没有运行,这导致我相信线程被重用。这是真的吗?
【问题讨论】:
标签: java multithreading google-app-engine thread-safety httprequest