1 package book.jcp.ch01.basic; 2 3 import java.math.BigInteger; 4 5 public class CachedFactorizer { 6 7 private BigInteger lastNumberBigInteger; 8 private BigInteger[] lastFactorsBigIntegers; 9 private long hits; 10 private long cacheHits; 11 12 public synchronized long getHits() { 13 return hits; 14 } 15 16 public synchronized double getHitRatio() { 17 return (double) cacheHits / (double) hits; 18 } 19 20 public void service(int req, int resp) { 21 BigInteger i = extractFromRequest(req); 22 BigInteger[] newFactors = null; 23 synchronized (this) { 24 ++hits; 25 if (i.equals(lastNumberBigInteger)) { 26 ++cacheHits; 27 newFactors = lastFactorsBigIntegers.clone(); 28 } 29 } 30 if (newFactors == null) { 31 newFactors = factor(i); 32 synchronized (this) { 33 lastNumberBigInteger = i; 34 lastFactorsBigIntegers = newFactors.clone(); 35 } 36 } 37 encodeIntoResponse(resp, newFactors); 38 } 39 40 private BigInteger[] factor(BigInteger i) { 41 // TODO Auto-generated method stub 42 return null; 43 } 44 45 private void encodeIntoResponse(int resp, BigInteger[] factors) { 46 // TODO Auto-generated method stub 47 48 } 49 50 private BigInteger extractFromRequest(int req) { 51 // TODO Auto-generated method stub 52 return null; 53 } 54 }