Почему без объявления поля proposal с модификатором volatile я получаю вывод:
Сделано предложение №1
Принято предложение №1
Сделано предложение №2
Сделано предложение №3
Сделано предложение №4
Сделано предложение №5
Сделано предложение №6
Сделано предложение №7
Сделано предложение №8
Сделано предложение №9
Сделано предложение №10
В thisProposal метода класса AcceptProposal должно хранится значение 0 и условие
thisProposal != proposal
Должно возвращать false, так как 0 == 0
Собственно, на этом и задача построена. Так почему поле proposal все же меняет свое значение в медленной памяти один раз в самом начале?package com.javarush.task.task17.task1709;
/*
Предложения
*/
public class Solution {
public static int proposal = 0;
public static void main(String[] args) {
new AcceptProposal().start();
new MakeProposal().start();
}
public static class MakeProposal extends Thread {
@Override
public void run() {
int thisProposal = proposal;
while (proposal < 10) {
System.out.println("Сделано предложение №" + (thisProposal + 1));
proposal = ++thisProposal;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static class AcceptProposal extends Thread {
@Override
public void run() {
int thisProposal = proposal;
while (thisProposal < 10) {
if (thisProposal != proposal) {
System.out.println("Принято предложение №" + proposal);
thisProposal = proposal;
}
}
}
}
}