在java的多线程进程中更新布尔值

bfhwhh0e  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(364)

我有以下代码:

public class CheckIfSame implements Runnable {

private int[][] m;
private int[][] mNew;
private int row;
private boolean same;

public CheckIfSame(int[][] m,int[][] mNew,,int row,boolean same) {
    this.m = m;
    this.mNew = mNew;
    this.row = row;
    this.same = same;
}

@Override
public void run() {
    for (int i = 0; i < mUpd[0].length; i++) {
        if(m[row][i] != mUpd[row][i]) {
            same = false;
        }       
    }

}

}
基本上,我使用多线程来逐行检查两个矩阵是否至少相差1个元素。
我通过主类激活这些线程,将行传递给执行器池。
但是,出于某种原因,即使满足if条件,布尔值same似乎也不会更新为false。

sauutmhj

sauutmhj1#

多个线程试图同时访问该布尔值:更新 same 变量。
你可以选择一个 AtomicBoolean . 当有多个线程访问布尔变量时使用它:

public class CheckIfSame implements Runnable 
{
   //...
   private AtomicBoolean same;

   public CheckIfSame(..., AtomicBoolean same) 
   {
    //...
    this.same = same;
   }

    @Override
    public void run() 
    {
      for (int i = 0; i < mUpd[0].length; i++) 
         if(m[row][i] != mUpd[row][i]) 
             same.set(false);   //  <--race conditions hate this
    }  
 }

相关问题