JavaOne 2012: How Do Non-Blocking Data Structures Work?