Я новичок в многопоточности в Java и не совсем понимаю, что происходит.
Из онлайн-учебников и заметок к лекциям я знаю, что блок synchronized
, который должен применяться к ненулевому объекту, гарантирует, что только один поток может выполнить этот блок кода. Поскольку массив в Java является объектом, к нему можно применить синхронизацию. Кроме того, если в массиве хранятся объекты, я также должен иметь возможность синхронизировать каждый элемент массива.
В моей программе несколько потоков обновили массив чисел, поэтому я создал массив из Long
объектов:
synchronized (grid[arrayIndex]){
grid[arrayIndex] += a.getNumber();
}
Этот код находится внутри метода run()
класса потока, который я расширил. Массив, сетка, используется всеми моими потоками. Однако это не возвращает правильных результатов при выполнении одной и той же программы в одном потоке.