При запуске 2 методов main изменения переменных не фиксируются

Всем привет) Столкнулся с интересным для себя моментом: Понимаю что пример притянут за уши, но тем не менее

Допустим у меня есть класс Main, с одним полем и одним методом

public class Main {

public static boolean isLive = false;

public static void main(String[] args) throws InterruptedException {
    while (true) {
        isLive = true;

        Thread.sleep(1000);

        System.out.println(Cat.isLive);
    }
} 

и класс Cat с одним полем и одним методом

public class Cat {

public static boolean isLive = false;

public static void main(String[] args) throws InterruptedException {
    while (true) {
        Thread.sleep(1000);

        isLive = true;

        System.out.println(Main.isLive);

    }
}

}

При запуске двух методов main, я думал, что выводы переменных, рано или поздно (через 1 сек) , придут к true. Но был сильно удивлен, когда узнал, что изменения значения в переменных вообще не происходит. Точнее происходит, но другой метод main об этом не узнает.

Подскажите пожалуйста, почему так получается, что метод main видит изменения переменных только в своем классе, но не видит изменений другого класса

Заранее спасибо)


Ответы (2 шт):

Автор решения: Roman-Stop RU aggression in UA

Во-первых, вы запускаете два разных процесса. У каждого процесса своя память, так что даже если они будут обращаться к одной и той же переменной, то у каждого процесса она будет своя.

Во-вторых, в этой программе каждый класс использует свою статическую переменную. Это значит, что даже если бы два метода main выполнялись в рамках одного процесса (это можно сделать используя многопоточность), то это все равно две разные переменные в памяти, и изменения одной никак бы не повлияли на другую.

→ Ссылка
Автор решения: Эникейщик

Причина такая же, как и в ситуации, когда у двух людей на двух одинаковых телефонах есть фотоальбомы, но фотографии в них разные. Ведь кроме названий телефонов и приложения ничего общего тут больше нет. Так и у вас - одинаковые имена переменых не означает, что эта переменные вообще как-то связаны друг с другом.

→ Ссылка