【发布时间】:2012-09-25 17:40:03
【问题描述】:
众所周知,简单的x++不是原子操作,实际上是读-增-写操作。这就是为什么它应该同步。但是get() 呢?我读过它也应该同步,但有人能解释一下为什么吗?通过引入happens-before关系来避免内存一致性错误?
当get() 经常被多个线程调用并且值很少更改时,情况会怎样。 synchronized get() 不是让他们慢下来吗?在这种情况下是否有其他方法可以实现同步(不使用 AtomicInteger)? volatile 关键字在这里有用吗?
public class Counter {
private int value;
public synchronized int get() { return value; }
public synchronized int increment() { return ++value; }
public synchronized int decrement() { return --value; }
}
谢谢!
编辑:
我想澄清一下。通过使用volatile,我的意思是在get() 方法中引入该关键字并删除synchronized。我想知道它是否会使其成为线程安全的,但如果许多线程正在读取该值并且一个很少更改它,那么它是否会更有效。
【问题讨论】:
标签: java multithreading synchronization counter