【发布时间】:2015-09-28 03:34:17
【问题描述】:
在Java Concurrency In Practice, Section 2.1 中,它声明:
无状态对象始终是线程安全的。
并以如下类为例:
@ThreadSafe
public class StatelessFactorization implements Servlet {
public void service(ServletRequest req, ServletResponse resp){
BigInteger i = extractFromRequest(req);
BigInteger[] factors = factor(i);
encodeIntoResponse(resp, factors); // <-- isn't it possible for resp to be
// modified by mult. threads at once?
}
}
问题:
如上面的代码所示,如果多个线程尝试修改同一个ServletResponse 变量会发生什么。
根据我对内存分配的理解,上面的类似乎并不是完全线程安全的。
虽然对 ServletRequest 和 ServletResponse 的引用被放置在调用线程的本地堆栈中,但实际对象存储在堆上——所有线程之间共享。
【问题讨论】:
标签: java multithreading concurrency