簡體   English   中英

使用ThreadLocal與Atomic

[英]Using ThreadLocal vs Atomic

根據ThreadLocal的javadoc,它聽起來像是1+原子場的特定於線程的容器。

ThreadLocal的目的是表示單個Thread所有原子字段,還是當您有多個需要在邏輯上組合在一起的Atomic*實例時,它是否只提供了一個便利容器?

我想我想知道為什么我會想要使用ThreadLocal而不是AtomicLongAtomicInteger 提前致謝!

的目的ThreadLocal是,該領域不必是原子的-沒有必要對他們的價值觀與集中存儲同步。 它們是線程本地的,只存在於線程本地存儲器中。

為什么我會想要使用ThreadLocal而不是AtomicLong或AtomicInteger?

ThreadLocal對於存儲某事物的每線程副本非常有用。 例如,簡單的SimpleDateFormat不可重入。

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或其他原子操作。

我想我想知道為什么我會想要使用ThreadLocal而不是AtomicLong或AtomicInteger?

它們用於完全不同的目的。 ThreadLocal意味着您不必擔心同步,只需授予每個線程自己的對象副本。 因此,存儲在ThreadLocal的對象不可能被多個線程訪問。

Atomic*也意味着您不必擔心同步,但它們特別適合跨線程共享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM