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同时覆盖具有相同值的原语的主要内容,如果未能解决你的问题,请参考以下文章

为啥浮点字典键可以覆盖具有相同值的整数键?

java有这种写法吗?生成一个对象的同时还覆盖重写了父类的方法…………

使用相同的请求标识符同时注册 2 个本地通知不被覆盖

java map集合赋值 key值相同覆盖问题

Java——方法的重写(覆盖)

java的重写