【问题标题】:Java concurrently overwrite a primitive with the same valueJava同时覆盖具有相同值的原语
【发布时间】:2018-10-31 01:00:25
【问题描述】:

我目前正在处理一个项目,该项目使用并行流来覆盖布尔值,但仅将其更改为 false。我很好奇这在 Java 中是如何工作的。

如果两个请求同时(完全相同的时间)用相同的值覆盖布尔值。会发生什么?

【问题讨论】:

  • 所以这应该失败? boolean foo = false; foo = false; foo = false; 但是.. 你可能已经创建了一个线程不安全的程序,除非你更新 volatile 原始字段或使用某种显式同步。
  • 好吧,让我重新表述我的问题,如果两个请求同时(完全相同)覆盖具有相同值的布尔值怎么办。会发生什么?

标签: java concurrency


【解决方案1】:

完全相同的时间是不可能的。 Java 虚拟机经常使用操作系统内核提供的底层调度程序。调度程序实现了一个函数 s(t) 从 time 到根据特定策略(FIFO、SJF、Round Robin、Real Time 策略等)将 CPU 分配给进程的进程。在每个 t 中,当前只有一个进程在运行,除非调度程序执行上下文切换,否则其他进程将放入就绪队列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-05
    • 2020-03-08
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多