TGViewer
Java | Вопросы собесов Java | Вопросы собесов @easy_java_ru · 11.3K subscribers
Post #2007 2.53K
🤔 Что знаешь про модели памяти в Java?

Модель памяти Java (Java Memory Model, JMM) определяет, как взаимодействуют потоки через память и как изменения, сделанные одним потоком, становятся видимыми для других потоков. Модель памяти Java является фундаментальной частью многопоточной среды в Java, обеспечивающей корректность и предсказуемость поведения многопоточных программ.

🚩Основные аспекты

🟠Взаимодействие потоков и памяти:

JMM определяет, как потоки взаимодействуют с переменными (данными), хранящимися в общей памяти. Каждая переменная в Java хранится в основной памяти (main memory), и потоки могут иметь локальные копии этих переменных в своих рабочих кешах.

🟠Чтение и запись переменных
Когда поток читает переменную, он может читать ее из своей локальной копии или из основной памяти. Когда поток записывает переменную, он может записывать ее в свою локальную копию или непосредственно в основную память.

🚩Гарантии JMM

🟠Последовательная согласованность (Sequential Consistency)
Последовательная согласованность гарантирует, что действия всех потоков будут выполняться в том порядке, в котором они были написаны в коде, если нет явных указаний на обратное.

🟠Видимость (Visibility)
Видимость означает, что изменения, сделанные одним потоком, становятся видимыми для других потоков. В JMM видимость изменений обеспечивается с помощью синхронизации.

🟠Произвольный порядок выполнения (Out-of-Order Execution)
JMM допускает оптимизации, такие как переупорядочивание инструкций, чтобы улучшить производительность, но гарантирует, что видимость и порядок выполнения будут сохраняться, как описано в спецификации.

public class VisibilityExample {
private static boolean flag = false;
private static int counter = 0;

public static void main(String[] args) throws InterruptedException {
Thread writer = new Thread(() -> {
counter = 42;
flag = true;
});

Thread reader = new Thread(() -> {
while (!flag) {
// Ждем пока флаг не станет true
}
System.out.println("Counter: " + counter);
});

writer.start();
reader.start();

writer.join();
reader.join();
}
}


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
  • 💊 1
More from @easy_java_ru
  1. Oct 4, 2026🤔 Что необходимо для того чтобы клонировать один объект в другой? Для клонирования объект…
  2. Oct 4, 2026🤔 Что такое сигнатура? Сигнатура метода – это его уникальная идентификация в классе. Она…
  3. Oct 4, 2026Post #2940
  4. Oct 3, 2026🤔 В каких состояниях может находиться поток? Поток может находиться в следующих состояния…
  5. Oct 3, 2026Post #2938
  6. Oct 3, 2026🤔 Что такое Appender в log4j? Это компонент, который отвечает за отправку логов в различн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →