http://www.onjava.com/pub/a/onjava/excerpt/BFLJava_chap8/index.html
http://www.onjava.com/pub/a/onjava/excerpt/BFLJava_chap8/index1.html