Concurrent Programming in Java
© 1996 Doug Lea

Errata for the second printing

Corrections and Clarifications

Page 17 and 18
Replace `SimpleMessageApplet' with `ThreadedApplet' [Inconsistent naming.]
Page 30 and 315
Replace `Coularis' with `Coulouris'. [Typo.]
Page 49
Replace `Owner y requests a Resource from Owner x' with `Owner x requests a Resource from Owner y' [Dumb error.]
Page 53
Replace `IllegalArgumentAxception' with `IllegalArgumentException' [Typo]
Page 64
Replace "the each method" with "each method" [Typo.]
Page 69
Add footnote: Even though synchronization might not be strictly necessary in moveTo and shiftX methods as the class is written, they would be in more realistic versions of this class containing other methods that rely on atomicity of updates to prevent inconsistent access. [Clarification.]
Page 99
Replace comment: //invariant: 0 <= capacity with //invariant 0 < capacity [Usage inconsistency]
Page 110
Add footnote: `Note that in this implementation, zero is not a valid value for maxWaitMillis since wait(0) has the special meaning in Java of being equivalent to wait(). [Clarification.]
Page 143
Replace AccountUser with AccountHolder [Typo.]
Page 234
Replace g.fillRect(origin.x, origin.y, size_.width, size_.height; with g.fillRect(origin.x, origin.y, size_.width, size_.height); (i.e., add missing end-parenthesis) [Typo]
Page 253 and 254
Replace int newValue = value with int newValue = other.value_ [Coding error.]
Page 301
Replace protected Object waitingReaderMonitor_ = new Object();
with protected Object waitingReaderMonitor_ = this;
[This change (as suggested on page 300) removes a potential deadlock condition.]
Thanks to Jyrki Heikkinen, Beverly Sanders, Dennis Ulrich, Yukari Shirota, Yacov Eckel, Kelly Davis, Glenn Goldstein, Colin Cooper, Dave Yost, Hidehiko Masuhara, Tatsuya Aoyagi, and Robert Trevellyan for pointing out problems.

Please send any questions or comments about this book to

Doug Lea
Last modified: Fri Oct 22 07:02:12 EDT 1999