簡體   English   中英

是否有可能每個線程都有一個唯一的靜態變量?

[英]Is it possible to have a static variable unique per thread?

我有一個靜態變量,我希望每個線程都是唯一的。

這是所有靜態變量的情況嗎? 或者不能保證。 也就是說,線程偶爾會更新主內存中的靜態變量值,還是保留給自己?

如果無法保證這一點,Java中是否存在靜態和線程唯一的任何類型的變量? 什么東西本質上是一個線程的全局,但隱藏其他線程?

我認為你要找的是Java的ThreadLocal

該類提供線程局部變量。 這些變量與它們的正常對應物的不同之處在於,訪問一個變量的每個線程(通過其get或set方法)都有自己獨立初始化的變量副本。

請注意,如果你進行線程池,這可能會給你帶來麻煩,因為你可能認為你正在獲得一個新的線程,從它開始一個新進程的角度來看,但是正在發生的是你正在重用一個完成其他工作的線程數據因此有剩余,當它們在野外發生時很難調試。

是一個使用ThreadLocal的教程。

static變量在線程之間共享。

如果您希望每個線程的變量都是唯一的,則可能需要使用ThreadLocal

 // Atomic integer containing the next thread ID to be assigned
 private static final AtomicInteger nextId = new AtomicInteger(0);

 // Thread local variable containing each thread's ID
 private static final ThreadLocal<Integer> threadId =
     new ThreadLocal<Integer>() {
         @Override protected Integer initialValue() {
             return nextId.getAndIncrement();
     }
 };

暫無
暫無

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

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