Java threads - part 2
-
Upload
nakraynikov-oleg -
Category
Software
-
view
276 -
download
2
Transcript of Java threads - part 2
Накрайников Олег[email protected]
Java Threads. Part 2
Java. The well-known and not well-known
Java memory model (JMM) , Atomics, Concurrent collections
Пролог
Пакет java.util.concurrent.*
Executors
AtomicsLocks Synchronizers
QueuesConcurrent collections
О чем поговорим сегодня
▪ Java memory model (JMM) ▪ Atomics▪ Concurrent collections
Предпосылки модели памяти
Поток 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.
Предпосылки модели памяти1) Выделит память под новый объект2) Вызовет конструктор класса Data3) Запишет значение 42 в поле answer класса Data4) Запишет строку в поле question класса Data5) Запишет значение 9000 в поле maxAllowedValue класса Data6) Запишет только что созданный объект в поле data класса Main
Модель памяти
▪ Однопоточные программы исполняются псевдопоследовательно▪ Нет невесть откуда взявшихся значений: либо
значение по умолчанию либо присвоеное▪ Остальные события выполняются по порядку
если связаны отношением строгого частичного порядка «выполняется прежде» (англ. happens before)
Happens beforeВторая команда будет «в курсе» изменений, проведённых первой
Когерентность кешей, sharing, volatile
Когерентность кешей, sharing, volatile
Thread A: sharedObject.nonVolatile = 123;sharedObject.counter = sharedObject.counter + 1;
Thread B: int counter = sharedObject.counter; int nonVolatile = sharedObject.nonVolatile;
Atomics
Вывод: 30000Вывод: не детерминирован, но < 30000
Пакет 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
Пакет java.util.concurrent.atomic.*
AtomicIntegerArray, AtomicILongArray
- Creating an AtomicIntegerArray, AtomicILongArray- get()- set()- compareAndSet()- addAndGet()- getAndAdd()- incrementAndGet()- getAndIncrement()- decrementAndGet()- getAndDecrement()- Additional Methods
AtomicReferenceArray - Creating an AtomicReferenceArray- get()- set()- compareAndSet()- Additional Methods
Пакет java.util.concurrent.atomic.*
LongAdder, DoubleAdder - add(long x)- decrement()- increment()- sum()- reset()
LongAccumulator, DoubleAccumulator
- LongAccumulator(LongBinaryOperator accumulator, long identity)- accumulate(long x)- get()- reset()
Пакет java.util.concurrent.atomic.*
LongAdder, DoubleAdder - add(long x)- decrement()- increment()- sum()- reset()
LongAccumulator, DoubleAccumulator
- LongAccumulator(LongBinaryOperator accumulator, long identity)- accumulate(long x)- get()- reset()
Базовые Concurrent Collections
- Hashtable()- Collections.synchronizedList()- Collections.synchronizedSet()- Collections.synchronizedMap()
Базовые Concurrent Collections
- Hashtable()- Collections.synchronizedList()- Collections.synchronizedSet()- Collections.synchronizedMap()
Lockfree Concurrent Collections
- CopyOnWriteArrayList<E>- CopyOnWriteArraySet<E>- ConcurrentHashMap<K, V>- ConcurrentSkipListMap<K, V>- ConcurrentSkipListSet<E>
Blocking Queues
- ArrayBlockingQueue<E>- LinkedBlockingQueue<E>- PriorityBlockingQueue<E>- DelayQueue<E extends Delayed>- SynchronousQueue<E> - LinkedTransferQueue<E>
Использованные источники
▪ Википедия - Модель памяти 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%D0%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/]
Спасибо за внимание!