gpt4 book ai didi

java - 并发读取/写入java中的变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:34 25 4
gpt4 key购买 nike

如果我有一个变量,多个线程从中读取而只有一个线程写入,我是否需要在该变量周围加锁?如果一个线程尝试读取而另一个线程尝试同时写入,它会崩溃吗?

最佳答案

并发问题不是崩溃,而是您看到的数据版本。

  • 如果共享变量是以原子方式写入的,当您认为您的(写入者)线程已更新该变量时,一个(读取者)线程可能会读取一个陈旧的值。在这种情况下,您可以使用 volatile 关键字来防止您的读取器线程读取过时的值。

  • 如果写操作不是原子的(例如,如果它是某种复合对象,并且您一次写入它的一部分,而其他线程理论上可以读取它)那么您会担心也可能是一些读者线程可以看到处于不一致状态的变量。您可以通过在写入变量时锁定对变量的访问(缓慢)或确保您以原子方式写入来防止这种情况。

写入某些类型的字段是原子的,但没有先发生的关系来确保正确的内存排序(除非你使用 volatile );见this page了解详情。

关于java - 并发读取/写入java中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6893539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com