Представьте себе проект java, содержащий 2 приложения. Для каждого из них: класс с основным методом для запуска приложения, скажем, Main1 и Main2. Оба приложения используют общий класс Service, содержащий последнее поле stati c:
public class Main1 {
public static void main(String[] args) throws InterruptedException {
for (int i =0;i<3;i++){
System.out.println("I'm application number 1. Time =" + Service.time);
sleep(1000);
}
}
}
public class Main2 {
public static void main(String[] args) throws InterruptedException {
for (int i =0;i<3;i++){
System.out.println("I'm application number 2. Time =" + Service.time);
sleep(1000);
}
}
}
public class Service {
public final static LocalDateTime time = LocalDateTime.now();
}
Результат меня как-то удивил. Кажется, что у Main1 и Main2 есть своя собственная версия Service:
I'm application number 1. Time =2020-07-13T17:04:55.155497300
I'm application number 1. Time =2020-07-13T17:04:55.155497300
I'm application number 1. Time =2020-07-13T17:04:55.155497300
I'm application number 2. Time =2020-07-13T17:04:58.800497300
I'm application number 2. Time =2020-07-13T17:04:58.800497300
I'm application number 2. Time =2020-07-13T17:04:58.800497300
Я повторил опыт с классом Service, используемым двумя потоками. Результат был другим: time
был инициализирован только один раз. Я немного пытаюсь понять это. Может ли кто-нибудь помочь мне понять, что происходит за кулисами?