【发布时间】:2015-11-05 00:43:30
【问题描述】:
由于许多误解,我从头开始重新提出这个问题。问题的意图没有改变。许多 cmets 仍然参考旧的问题文本。
关于volatile 的文档指出,它确保其他线程以一致的方式看到内存更新。但是,volatile 很少使用。
据我所知,synchronized 块的目的是使线程不会同时执行这些关键部分。 synchronized 是否也会像 volatile 那样导致对其他线程进行一致的内存更新?
【问题讨论】:
-
Vector已同步以防止您描述的内容。 (这是一个设计错误;同步速度很慢,通常是不必要的,并且在需要同步时经常不够用。)使用ArrayList,您会发现您的错误更频繁地困扰您。 -
问题是:“显然,这不会发生,否则我在职业生涯中会遇到这样的问题。我从来没有遇到过。”
-
Vector到处都是synchronized。synchronized提供了volatile行为的超集。 -
是的,
synchronized块中的写入(甚至是非易失性变量)对于在写入后发生在同一个锁上同步的块中的相同变量的读取是可见的。 -
it ensures that modifications of two volatile fields by one thread will either be seen both by another threads, or none will be seen by the other thread不,你绝对可以让第二个线程只看到两个volatile变量中的一个修改。
标签: java multithreading volatile