This document discusses trends towards lock-free concurrency in Java. It begins with an introduction to concurrency and Java's memory model. It then covers various concurrency primitives in Java 8 like volatile variables, atomics, concurrent collections, and explicit locks. It discusses how techniques like biased locking improve performance of atomics. Finally, it explores trends like software transactional memory (STM) that aim to make lock-free programming more practical.