繁体   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