簡體   English   中英

是否可以在幾個線程之間共享一個變量,但不是在所有線程之間共享?

[英]Is it possible to share a variable between few threads but not all of them?

我正在從第三方API中提取數據,我想知道是否有可能在某些線程之間共享變量,但並非所有線程都可以共享。

例:

我有2個用戶,我正在為每個用戶啟動2個線程。 假設用戶1的線程A,B和用戶2的線程C,D。現在,我需要某種標記來通知線程何時停止(假設已經讀取的頁面總數,這因用戶而異) 。 問題是,必須為屬於該特定用戶的2個線程(而不是其他線程)同步該標志。 我無法修改用戶實體。 創建2個標記是不可行的,因為這只是一個示例,實際上,可能會有多個用戶提取其數據。

這可能嗎? 如果是,那怎么辦?

謝謝你的時間。

只需使用boolean標志創建和對象,然后將其傳遞給構造函數中同一用戶的2個線程,並將其存儲在字段中

在為用戶創建線程時 ,還創建需要共享的標志並將其傳遞給線程,以便他們可以使用它並共享信息。

就像是:

AtomicBoolean userFlag = new AtomicBoolean(false);
Runnable a = new UserRunnable(userFlag);
Runnable b = new UserRunnable(userFlag);
// run a and b

UserRunnable

public class UserRunnable implements Runnable {
    private final AtomicBoolean flag;
    // + constructor

    @Override
    public void run() {
        // use the flag
    }
}

是否可以在幾個線程之間共享一個變量,但不是在所有線程之間共享?

那取決於你所說的“分享”。 程序中的所有線程都在相同的虛擬地址空間中運行。 內存中的任何對象都有可能被任何線程訪問,但這並不意味着每個線程必須訪問每個對象。

線程會執行您為它們編寫的代碼告訴它們執行的任何操作。 如果希望兩個不同的線程查看兩個不同的標志,請為它們編寫代碼,以查看兩個不同的標志。 或者,編寫一個在其構造函數中接受Flag對象的類,然后對兩個線程使用相同的類,但使用對不同Flag對象的引用構造的不同實例。

暫無
暫無

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

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