(Taken from ThreadsConsideredHarmful).
Is it that MonitorsAreBad because of AbstractionInversion or because of RaceConditions?
Mainly RaceConditions and DeadLock. Compare with EventLoopConcurrency: http://www.erights.org/elib/concurrency/event-loop.html
The most important point on that page is:
In other words, "manual" use of threads and locks is similar to manual memory management, in that it involves maintaining behavioural properties across abstraction boundaries. That is why both are unsuitable for use with ObjectOrientedProgramming.
So what's the alternative?
See MessagePassingConcurrency. (EventLoopConcurrency is a special case of MessagePassingConcurrency.)