Я новичок в Java и посещаю курс по параллельному программированию. Были поиски, но не могли получить базовые рамки. Программисты на Java, пожалуйста, помогите.
Вот очень яркий пример совместного использования массива между двумя потоками. Обычно вы видите только нули, но иногда что-то идет не так, и вы видите другие числа.
final int[] arr = new int[100];
Thread one = new Thread() {
public void run() {
// synchronized (arr) {
for (int i = 0; i < arr.length * 100000; i++) {
arr[i % arr.length]--;
}
// }
}
};
Thread two = new Thread() {
public void run() {
// synchronized (arr) {
for (int i = 0; i < arr.length * 100000; i++) {
arr[i % arr.length]++;
}
//}
}
};
one.start();
two.start();
one.join();
two.join();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
Но если вы синхронизируете по arr
вокруг цикла, вы всегда будете видеть все 0
s в распечатке. Если вы раскомментируете синхронизированный блок, код будет работать без ошибок.