In Part 2 of my three-part Fearless Security series, I’ll explore thread safety. Today’s applications are multi-threaded—instead of sequentially completing tasks, a program uses threads to perform multiple tasks simultaneously. We all use concurrency and parallelism every day: Web sites serve multiple simultaneous users. User interfaces perform background work that doesn’t interrupt the user. (Ima