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(Solution.proposal);
                System.out.println("Сделано предложение №" + (proposal + 1));
                proposal++;
                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(thisProposal);
                    //System.out.println(proposal);
                    System.out.println("Принято предложение №" + proposal);
                    thisProposal = proposal;
                }

            }
        }
    }
}
Почему отрабатывает AcceptProposal если она не видит изменений? Тогда proposal должен остаться равен нулю. Но каким-то образом, она меняет значение и входит в условие if. Сделано предложение №1 Принято предложение №1 Сделано предложение №2 Сделано предложение №3 Сделано предложение №4 Сделано предложение №5