[英]Java Threads - Keep function in sync with multiple returning values from threads
這只是一個概念:
如何確保我的值永遠不會發生沖突或我的函數正在查看尚未更新的舊值?
我是線程的新手,所以任何信息都很有價值。
這是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.