【发布时间】:2011-02-16 08:45:02
【问题描述】:
我有一个用于多线程应用程序的 Java 类。并发访问的可能性很大。多个并发读取操作不应阻塞,因此我使用的是 ReadWrite 锁。
class Example {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private int i;
private boolean b;
public int getI() {
lock.readLock().lock();
final int tmp = i;
lock.readLock().unlock(),
return tmp;
}
public void setI( final int i ) {
lock.writeLock().lock();
this.i = i;
lock.writeLock().unlock();
}
public boolean getB() {
lock.readLock().lock();
final boolean tmp = b;
lock.readLock().unlock(),
return tmp;
}
public void setB( final boolean b ) {
lock.writeLock().lock();
this.b = b;
lock.writeLock().unlock();
}
}
为简单起见,我在此示例中省略了锁周围的 try...finally 块。
我想知道是否有必要(或者说推荐)锁定/同步原始类型的 getter 和 setter?我知道 Java 中的分配和返回操作是原子的。但是,通过使用这些锁,我不能确保每个访问者都获得最新的值(等于使用volatile)吗?
如果原语是double 或long 会怎样?
【问题讨论】:
标签: java multithreading synchronization locking readwritelock