This document discusses techniques for writing highly scalable Java programs for multi-core systems. It begins with an overview of hardware trends showing an increasing number of cores per chip. It then discusses profiling tools that can identify lock contention issues. The document provides best practices for Java programming including reducing locking scope, splitting locks, stripping locks, using atomic variables, and lock-free algorithms. It emphasizes using concurrent containers and immutable/thread-local data where possible.