在这种情况下
是否存在竞争条件:当然,当一个线程读取而另一个线程以不同的方法写入时。我是多线程和并发的初学者
class counter {
int count = 0;
void increment() {
count++;
}
int read() {
return count;
}
}
class voltest {
public static void main(String[] args) {
final counter c = new counter();
Runnable r1 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
c.increment();
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
c.read();
}
};
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
}
是的,有一个竞争条件。像count++
这样的表达式不是原子的 - 它们被归类为读取-修改-写入表达式,另一个线程可以随时访问该变量。
看看这个关于Java原子的链接,它实际上讨论了使用增量运算符。