4. О чем поговорим сегодня
▪ Java memory model (JMM)
▪ Atomics
▪ Concurrent collections
5. Предпосылки модели памяти
Поток 1 Поток 2
x = 1; int r1 = y;
y = 2; int r2 = x;
Ожидание: если поток 2 считал y==2, то x==1,
то есть r1=2, r2=1
Реальность: r1=2, r2=0.
6. Предпосылки модели памяти
1) Выделит память под новый объект
2) Вызовет конструктор класса Data
3) Запишет значение 42 в поле answer класса Data
4) Запишет строку в поле question класса Data
5) Запишет значение 9000 в поле
maxAllowedValue класса Data
6) Запишет только что созданный объект в поле data
класса Main
7. Модель памяти
▪ Однопоточные программы исполняются
псевдопоследовательно
▪ Нет невесть откуда взявшихся значений: либо
значение по умолчанию либо присвоеное
▪ Остальные события выполняются по порядку
если связаны отношением строгого частичного
порядка «выполняется прежде» (англ. happens
before)
12. Пакет java.util.concurrent.atomic.*
AtomicBoolean - Creating an AtomicBoolean
- Getting the AtomicBoolean's Value
- Setting the AtomicBoolean's Value
- Swapping the AtomicBoolean's Value
- Compare and Set AtomicBoolean's Value
AtomicInteger, AtomicLong - Creating an AtomicInteger/AtomicLong
- Getting the AtomicInteger Valuec
- Setting the AtomicInteger Value/AtomicLong
- Compare and Set the AtomicInteger Value/AtomicLong
- Adding to the AtomicInteger Value/AtomicLong
- Subtracting From the AtomicInteger Value/AtomicLong
AtomicReference - Creating an AtomicReference
- Getting the AtomicReference Reference
- Setting the AtomicReference Reference
- Comparing and Setting the AtomicReference Reference
20. Использованные источники
▪ Википедия - Модель памяти Java
[https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5
%D0%BB%D1%8C_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D
0%B8_Java]
▪ Habrahabr - Модель памяти в примерах и не только
[http://habrahabr.ru/post/133981/]
▪ jenkov.com - Java Concurrency / Multithreading Tutorial
[http://tutorials.jenkov.com/java-concurrency/index.html]
▪ Habrahabr - Обзор java.util.concurrent.*
[http://habrahabr.ru/company/luxoft/blog/157273/]