Java supports multi-threading using the `Thread` class and `Runnable` interface. Concurrency is managed through synchronized blocks, locks, and the `java.util.concurrent` package.