java threads - part 2

Post on 13-Feb-2017

276 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Накрайников Олегuchonyy@gmail.com

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/]

Спасибо за внимание!

top related