簡體   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