Java同时覆盖具有相同值的原语
Posted
技术标签:
【中文标题】Java同时覆盖具有相同值的原语【英文标题】:Java concurrently overwrite a primitive with the same value 【发布时间】:2018-10-31 01:00:25 【问题描述】:我目前正在处理一个项目,该项目使用并行流来覆盖布尔值,但仅将其更改为 false。我很好奇这在 Java 中是如何工作的。
如果两个请求同时(完全相同的时间)用相同的值覆盖布尔值。会发生什么?
【问题讨论】:
所以这应该失败?boolean foo = false; foo = false; foo = false;
但是.. 你可能已经创建了一个线程不安全的程序,除非你更新 volatile
原始字段或使用某种显式同步。
好吧,让我重新表述我的问题,如果两个请求同时(完全相同)覆盖具有相同值的布尔值怎么办。会发生什么?
【参考方案1】:
完全相同的时间是不可能的。 Java 虚拟机经常使用操作系统内核提供的底层调度程序。调度程序实现了一个函数 s(t) 从 time 到根据特定策略(FIFO、SJF、Round Robin、Real Time 策略等)将 CPU 分配给进程的进程。在每个 t 中,当前只有一个进程在运行,除非调度程序执行上下文切换,否则其他进程将放入就绪队列。
【讨论】:
以上是关于Java同时覆盖具有相同值的原语的主要内容,如果未能解决你的问题,请参考以下文章