java并发编程-线程安全1:servlet访问统计

来源:互联网 发布:海岛奇兵潜艇升级数据 编辑:程序博客网 时间:2024/06/18 04:37

非安全:

@NotThreadSafepublic class UnsafeCountingFactorizer extends GenericServlet implements Servlet {    private long count = 0;    public long getCount() {        return count;    }    public void service(ServletRequest req, ServletResponse resp) {        BigInteger i = extractFromRequest(req);        BigInteger[] factors = factor(i);        ++count;        encodeIntoResponse(resp, factors);    }    void encodeIntoResponse(ServletResponse res, BigInteger[] factors) {    }    BigInteger extractFromRequest(ServletRequest req) {        return new BigInteger("7");    }    BigInteger[] factor(BigInteger i) {        // Doesn't really factor        return new BigInteger[] { i };    }}

安全:

@ThreadSafepublic class CountingFactorizer extends GenericServlet implements Servlet {    private final AtomicLong count = new AtomicLong(0);    public long getCount() { return count.get(); }    public void service(ServletRequest req, ServletResponse resp) {        BigInteger i = extractFromRequest(req);        BigInteger[] factors = factor(i);        count.incrementAndGet();        encodeIntoResponse(resp, factors);    }    void encodeIntoResponse(ServletResponse res, BigInteger[] factors) {}    BigInteger extractFromRequest(ServletRequest req) {return null; }    BigInteger[] factor(BigInteger i) { return null; }}


0 0