當多個thread共享某些變數,可以透過synchronized或是lock來保護共享變數,避免產生race condition問題。這樣的作法安全但是效能會變慢,是以時間換空間的方法。
將共享變數各複製一份給thread,這樣既達安全性並且提升效能,是以空間換時間的方法。可以使用ThreadLocal來達到這樣的效果。
例如:
- 多個thread共享SimpleDateForamt變數,因為SimpleDateForamt不是ThreadSafe,因此會有同步問題。可以使用ThreadLocal解決。
- Database connection pool中的thread會共享某些變數,假如透過lock方式避免同步問題發生,但會導致效能較差。可以使用ThreadLocal解決,以空間來換取時間。
- Java Application Server利用ThreadLocal管理transaction和security資訊。