1. 程式人生 > >Java併發程式設計規則:無狀態物件永遠是執行緒安全的

Java併發程式設計規則:無狀態物件永遠是執行緒安全的

規則說明:

無狀態物件即無狀態類,是指其本身沒有內部變數和外部變數的操作的,在每個使用者訪問的執行緒棧中都是一個各自的例項。

執行緒安全的表現:

一個執行緒對該類的訪問不會影響其他執行緒的訪問結果。

執行緒安全的無狀態類示例:

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的結果,兩個執行緒不共享狀態,如同是在訪問兩個例項。