私は Java のマルチスレッドに不慣れで、何が起こっているのかよくわかりません。
オンライン チュートリアルと講義ノートから、synchronizednull 以外のオブジェクトに適用する必要があるブロックにより、1 つのスレッドのみがそのコード ブロックを実行できることが保証されることがわかりました。配列は Java のオブジェクトであるため、同期を適用できます。さらに、配列にオブジェクトが格納されている場合、配列の各要素も同期できるはずです。
Long私のプログラムにはいくつかのスレッドが数値の配列を更新しているため、オブジェクトの配列を作成しました。
synchronized (grid[arrayIndex]){
grid[arrayIndex] += a.getNumber();
}
このコードはrun()、私が拡張したスレッド クラスのメソッド内にあります。配列、グリッドは、すべてのスレッドで共有されています。ただし、1 つのスレッドで同じプログラムを実行している場合、これは正しい結果を返しません。