繁体   English   中英

在Java中的多个线程之间共享int或整数对象

[英]Sharing an int or an integer object between multiple threads in Java

我有一个多线程程序,包括ConcurrentHashMapConcurrentLinkedList等数据结构,但我还需要每个线程访问共享整数值。 线程本身是我自己做的扩展类Thread自定义线程类。 我的两个问题是:

  • 如何让每个线程看到相同的整数值? 我不认为原始int会起作用,因为它不会“通过引用传递”(或者更确切地说是通过对象指针的值传递)。 整数需要是可变的,并且所有其他线程需要看到线程对一个整数的任何更改。 使用整数对象修复此问题, AtomicInteger怎么样?

  • 我应该用什么来保护线程安全? 每个线程都会在每次运行循环时检查整数,但是当线程完成任务并即将返回时,它将更改整数。

提前致谢!

您应该使用AtomicInteger

然而,我会认为AtomicInteger是一个相当低级的原语。 我会质疑设计。 您是否考虑过使用ExecutorServiceCallableFuturesSemaphoreCountDownLatchFork / Join框架或高级java.util.concurrent API中的其他类?

您可以使用AtomicInteger 它支持许多原子操作。 例如addAndGetdecrementAndGetaddAndGet确实扩展了Number,因此您可以将它传递给在基于数字的类上运行的方法。

使用AtomicInteger 我建议你把它作为final,然后在AtomicInteger上使用诸如incrementAndGet

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM