0

目前这似乎有效,但也许有一天它会出错:

我有一个二维布尔数组,这些布尔值代表各种对象的状态(如果它们准备好或不被处理)

一个线程正在运行并制作这些对象,一旦制作了一个对象,它的布尔值就会设置为“true”(制作一个对象最多需要 20 毫秒)。

我的问题是:

我可以在线程发挥它的魔力时读取(仅读取)这个数组吗?如果线程在我的方法读取它时写入 true,会发生什么?

谢谢。

4

2 回答 2

2

写入boolean是原子的,因此您不会看到任何不一致之处。long和的情况并非如此double

发生在你身上的最糟糕的事情就是能见度。当一个线程更新给定变量但其他线程没有立即(或从不)看到该更改时,会出现可见性问题。

为了确保所有线程看到相同的最新值,您必须使用某种同步或volatile字段。

于 2012-07-20T16:30:50.827 回答
1

我可以在线程发挥它的魔力时读取(仅读取)这个数组吗?如果线程在我的方法读取它时写入 true,会发生什么?

是的,您可以很好地阅读它,如果您尝试对其进行写入,您可能会发现自己陷入困境。至于第二个问题,很简单,这是不可能的。您不能在该索引发生变化的同时读取该索引。它要么等到写入完成,要么读取写入之前的任何内容。

于 2012-07-20T16:28:52.110 回答