[英]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.