I don’t think synchronization (using the synchronized keyword) is anywhere near 5-10% of CPU usage.
It used to be somewhat high (16 ms)? in Java 1.0 or 1.1. But I believe it has gone down significantly in Java 1.2. I don’t have any benchmarks to support this claim, however…
Plus, you have neglible overhead if you already own the synchronization lock. The actual sync overhead is grabbing the lock.
On the other hand, debugging deadlocks and other threading bugs is a lot more work…