При запуске 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 шт):
Во-первых, вы запускаете два разных процесса. У каждого процесса своя память, так что даже если они будут обращаться к одной и той же переменной, то у каждого процесса она будет своя.
Во-вторых, в этой программе каждый класс использует свою статическую переменную. Это значит, что даже если бы два метода main выполнялись в рамках одного процесса (это можно сделать используя многопоточность), то это все равно две разные переменные в памяти, и изменения одной никак бы не повлияли на другую.
Причина такая же, как и в ситуации, когда у двух людей на двух одинаковых телефонах есть фотоальбомы, но фотографии в них разные. Ведь кроме названий телефонов и приложения ничего общего тут больше нет. Так и у вас - одинаковые имена переменых не означает, что эта переменные вообще как-то связаны друг с другом.