如果一个正在运行的线程访问一个特定的对象,那么它是否也锁定了该特定对象的字段成员?
发布于 2011-02-03 01:58:27
您是否显式地锁定了对象?您使用的是synchronized吗
锁定对象并不意味着锁定其成员。
发布于 2011-02-03 01:59:30
同步是围绕称为固有锁或监视器锁的内部实体构建的。( API规范通常将此实体简称为“监视器”。)内部锁在同步的两个方面都起着作用:强制独占访问对象的状态和建立对可见性至关重要的发生前关系。
发布于 2011-02-03 02:21:32
锁就是锁,它唯一能保证的就是一次只能有一个线程拥有它。由您来编写代码来确保您想要锁定的东西实际上是锁定的。
因此,如果你这样写:
class MyClass {
private int myvalue;
public synchronized void setValue(int newvalue) {
myvalue = newvalue;
}
}然后确保一次只能有一个线程写入myvalue。但是,如果您要公开myvalue或提供另一种写入方式,那么没有什么可以阻止其他线程同时写入myvalue。对逻辑进行编码由您决定。
https://stackoverflow.com/questions/4877984
复制相似问题