Java Threads, 2ed by Scott Oaks & Henry Wong Unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. This page was updated January 23, 2003. Here's the key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification UNCONFIRMED errors and comments from readers: [52] on the first code samle block line 5: private flag =new BusyFlag() should read: private BusyFlag flag = new BusyFlag() [89] the code example; In Java Vector is synchronized already, there is no need to write synchronized methods such as send() and recv() as the book did. The point that the example is trying to convey is good, but I think the example is bad. [110-113] Whole pages; Just a question regarding the AsyncInputStream class. I noticed two things while studying the code for this class: 1. Both of the constructors are protected. 2. There is no asynchronous read methods in this class. All of the read methods call empty.cvWait() if there is no data available t o be read. These two things lead me to believe that the authors meant for this class to be subclassed in order to be used properly. However, t he class needing to be subclassed seems to remove some of the usefulness of this example, and makes the reader need to write code t o make it actually work as advertised. [112] run method; in the try block of the run method try{ ... if ((c==-1) || EOF) { stmts1 } ... if (EOF) { stmts2 } } The question is: Will ever the second if (condition = EOF) be executed? It does not look like to me because of the or used in the first if.. . (213) In the QueuedBusyFlag class (whole page); Inconsistent names for the freeBusyFlag and tryGetBusyFlag methods. In both cases, the example in the book uses a lowercase 'f' in Flag. public synchronized void freeBusyflag() { should really be: public synchronized void freeBusyFlag() { and: public synchronized boolean tryGetBusyflag() { should really be: public synchronized boolean tryGetBusyFlag() { This can be verified by usage of this class by the DBAccess class on the following page which ivokes these methods with a uppercase 'F' in Flag. {216} Code sample block after first full paragraph; In the sample code which begins "public class BTree", the instance variable "lock" is not instantiated before use. The code should read public class BTree { RWLock lock = new RWLock(); ....