`synchronized` uses intrinsic monitor locks with automatic release. `ReentrantLock` is an explicit lock with features like `tryLock`, fairness policies, and interruptible lock acquisition—but you must release it in `finally`. Both are reentrant.