簡體   English   中英

Java 線程 - 使函數與線程的多個返回值保持同步

[英]Java Threads - Keep function in sync with multiple returning values from threads

這只是一個概念:

  • 我想通過在多個線程內運行的函數來更新 int 。
  • 我的函數隨機選擇一個 int 並檢查它是否大於現有的 int。
  • 如果是這樣,它會更新變量。

如何確保我的值永遠不會發生沖突或我的函數正在查看尚未更新的舊值?

我是線程的新手,所以任何信息都很有價值。

這是AtomicInteger的工作!

AtomicInteger atomic;
...
int newValue = atomic.accumulateAndGet​(rand, Math::max);

我如何確保我的價值觀永遠不會發生沖突?

如果您不熟悉線程,那么我會說,使用同步塊:

final Object lock = new Object();
int global_r = 0;
...
while (true) {
    int r = random.nextInt();
    synchronized(lock) {
        if (r > global_r) {
            global_r = r;
            break;
        }
    }
}

一次只有一個線程可以進入synchronized(lock)...塊。 當另一個線程已經在其中時嘗試的線程將被迫等待。

應該始終嘗試讓線程在synchronized(...)塊內花費盡可能少的時間,這就是為什么我在塊生成隨機數,並且只在其中進行測試和賦值。


這里的另一個答案建議您使用AtomicInteger 這也有效,但對於那些正在邁出了解如何使用線程的第一步的人,我不建議這樣做。

暫無
暫無

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

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