Conclusions
Concurrency is fundamentally hard; avoid whenever possible.
Threads more powerful than events, but power is rarely needed.
Threads much harder to program than events; for experts only.
Use events as primary development tool (both GUIs and distributed systems).
Use threads only for performance-critical kernels.