下面这个程序代码中,在任务中,执行这个代码会有错误, 一个任务可能在另一个任务执行第一个++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 classSynchronizedEvenGenerator 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()); }}
添加回答
举报
0/150
提交
取消