Java併發程式設計規則:無狀態物件永遠是執行緒安全的
阿新 • • 發佈:2019-02-08
規則說明:
無狀態物件即無狀態類,是指其本身沒有內部變數和外部變數的操作的,在每個使用者訪問的執行緒棧中都是一個各自的例項。
執行緒安全的表現:
一個執行緒對該類的訪問不會影響其他執行緒的訪問結果。
執行緒安全的無狀態類示例:
package net.jcip.examples; import java.math.BigInteger; import javax.servlet.*; import net.jcip.annotations.*; /** * StatelessFactorizer * * A stateless servlet * * @author Brian Goetz and Tim Peierls */ @ThreadSafe public class StatelessFactorizer extends GenericServlet implements Servlet { public void service(ServletRequest req, ServletResponse resp) { BigInteger i = extractFromRequest(req); BigInteger[] factors = factor(i); encodeIntoResponse(resp, factors); } void encodeIntoResponse(ServletResponse resp, BigInteger[] factors) { } BigInteger extractFromRequest(ServletRequest req) { return new BigInteger("7"); } BigInteger[] factor(BigInteger i) { // Doesn't really factor return new BigInteger[] { i }; } }
注意:一個執行緒訪問的StatelessFactorizer不會影響其他執行緒訪問StatelessFactorizer的結果,兩個執行緒不共享狀態,如同是在訪問兩個例項。