gpt4 book ai didi

java - 具有从外部传递对象参数的方法的类是无状态且线程安全的吗?

转载 作者:行者123 更新时间:2023-12-02 09:20:30 26 4
gpt4 key购买 nike

上下文:我正在阅读 Brian Goetz 和其他人写的“Java 并发实践”(对不起其他人)。在我的副本的开头有

@ThreadSafe
public class StatelessFactorizer implements Servlet {

public void service(ServletRequest req, ServletResponse resp) {
BigInteger i = extractFromRequest(req);
BigInteger[] factors = factor(i);
encodeIntoResponse(resp, factors);
}
}

(作者的代码示例是 here 但在书中它看起来就像我在上面添加的那样)

我的问题是:虽然“服务”方法有一些对某些对象的外部引用,但它可能可以用它做某事,例如更改它的状态。因此,如果 2 个线程同时调用“service”,则该状态将从 2 个位置进行修改,并且该类不是线程安全的。我说得对吗?

我提到的那本书是关于并发的。读者对 HTTP 和/或 Servlet 绝对一无所知。我的本书实例甚至没有说明“StatelessFactorizer”实现的“Servlet”是什么。因此,因为它可以是任何东西,所以不能有像“您的方法正在使用不应该影响其他请求的不同对象”这样的假设。我的意思是你不知道 'extractFromRequest(req)' 和 'encodeIntoResponse(resp, Factors)' 的作用。当本章讨论无状态时,我假设本章与 Servlet 无关。

最佳答案

基于此req and resp are stateless

Stateless means that all requests are separate from each other so every request must contain enough information on their own to fulfill the request. That means that each transaction of message based model of HTTP is processed separately from each other.

您的方法正在使用不同的对象,这些对象不应影响其他请求

i 派生自获取无状态请求的方法,因此它是无状态的

您可以对因素应用类似的逻辑

因此service方法是线程安全的

关于java - 具有从外部传递对象参数的方法的类是无状态且线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58730032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com