首页 > 关于不正确多线程资源共享问题的程序代码,想请教问题

关于不正确多线程资源共享问题的程序代码,想请教问题

下面这个程序代码中,在任务中,执行这个代码会有错误, 一个任务可能在另一个任务执行第一个++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());
  }
} 

第二个写法是你自己写的?
还是别人那里抄过来的?

【热门文章】
【热门文章】