下面这个程序代码中,在任务中,执行这个代码会有错误, 一个任务可能在另一个任务执行第一个++currentEvenValue时,第二个++currentEvenValue前调用next() -------这边为什么会出现问题,第一个任务与另一个任务有不相关,为什么会是不正确的资源共享?
public class EvenGenerator extends IntGenerator {
private int currentEvenValue = 0;
public int next() {
++currentEvenValue; // Danger point here!
++currentEvenValue;
return currentEvenValue;
}
改进后的版本中,使用使用synchronized 关键字,使得在被一个任务调用,其他任务不能执行这个代码,但中Thread . yield ( ) -- 意思是暂停当前程序,并其他线程,那不是与synchronized的本意想违背吗? 不又回到了改进之前程序吗? 执行任务执行程序代码时,可能有其他任务调用这个next ()方法
public class
SynchronizedEvenGenerator extends IntGenerator {
private int currentEvenValue = 0;
public synchronized int next() {
++currentEvenValue;
Thread.yield(); // Cause failure faster
++currentEvenValue;
return currentEvenValue;
}
public static void main(String[] args) {
EvenChecker.test(new SynchronizedEvenGenerator());
}
}
慕尼黑的夜晚无繁华
慕侠2389804
相关分类