【问题标题】:variable value changed simulateously by different threads变量值被不同线程模拟改变
【发布时间】:2011-12-30 08:15:32
【问题描述】:

我有许多并发运行的 http 请求服务线程。他们将为每个请求创建一个 Object(? extends Object) 并将对象保存在列表中。 建议我一些好的数据结构来实现这个列表。 我不能使用 ArrayList 因为它不是线程安全的。 我不喜欢使用 Vector - 因为它是同步的,所以当其中一个 http 线程正在保存对象时,它会使其他线程等待。 也试过LinkedList,但由于并发更新,有数据丢失。

【问题讨论】:

  • 是的,您应该使用同步。您对速度的关注被称为“过早的优化”。您的另一个选择是使用并发包中使用 CAS 的原子之一。
  • 同步是什么意思?在同一个时钟周期?你说的更新是什么意思?在 CPU 内存中,L1 缓存、L2 缓存还是主存?获得一致视图的唯一方法是使用某种锁定。否则你的问题没有任何意义。

标签: java multithreading variables simultaneous


【解决方案1】:

您的变量需要是原子的,这样它才能被多个线程安全地更新(参见 java.util.concurrent.atomic)。您还可以使用 AtomicInteger 来跟踪变量更新的次数。

但是您确定要在不显式控制变量更新的情况下执行此操作吗?

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2021-09-21
    相关资源
    最近更新 更多