目的ThreadLocal
は、フィールドがアトミックである必要がないことです。つまり、フィールドの値を集中型メモリと同期する必要はありません。それらはスレッドローカルであり、スレッドローカルメモリストレージにのみ存在します。
たとえば、AtomicLongやAtomicIntegerの代わりにThreadLocalを使用したいのはなぜですか?
ThreadLocal
何かのスレッドごとのコピーを保存するのに非常に便利です。たとえば、SimpleDateFormat
残念ながら再入可能ではないa。
private final ThreadLocal<DateFormat> threadLocal =
new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
}
};
...
// get one that is per-thread
DateFormat dateFormat = threadLocal.get();
これは便利なパターンです。メモリバリアがある他の不可分操作synchronize
について心配する必要がないからです。volatile