Concurrency - state models and Java programs (2. ed.)