java 8 concurrency updates

36
Java 8 Concurrency Updates Damian Łukasik

Upload: damian-lukasik

Post on 02-Jul-2015

157 views

Category:

Software


3 download

DESCRIPTION

More at https://github.com/dmnlukasik/java-8-concurrency-updates

TRANSCRIPT

Page 1: Java 8 Concurrency Updates

Java 8 Concurrency Updates

Damian Łukasik

Page 2: Java 8 Concurrency Updates

Parallel Streams

ConcurrentHashMap

Striped64

CompletableFuture

@Contended

Page 3: Java 8 Concurrency Updates

Parallel streams

Page 4: Java 8 Concurrency Updates

List<Integer> ints = range(1, 5)

ints.parallelStream().forEach(e -> print(e));

>> 3 2 4 1 5

Parallel Streams

Page 5: Java 8 Concurrency Updates

final int[] counter = {0};List<Integer> ints = range(1, 10000);

ints.parallelStream().map(e -> {

counter[0]++; return e;

});

>> 7329 Parallel Streams

Page 6: Java 8 Concurrency Updates

ForkJoinPool.commonPool()

Parallel Streams

Page 7: Java 8 Concurrency Updates

ForkJoinPool forkJoinPool = new ForkJoinPool(1);

forkJoinPool.submit(() -> ints.parallelStream()

.forEach(e -> counter[0]++)).get();

>> 10000

Parallel Streams

Page 8: Java 8 Concurrency Updates

List<Integer> ints = range(1, 5)

List<Integer> collected = ints

.parallelStream()

.collect(Collectors.toList());

print(collected)>> ???

Parallel Streams

Page 9: Java 8 Concurrency Updates

List<Integer> ints = range(1, 5)

List<Integer> collected = ints

.parallelStream()

.collect(Collectors.toList());

print(collected)>> 1 2 3 4 5

Parallel Streams

Page 10: Java 8 Concurrency Updates

Collector.Characteristics.CONCURRENT

Parallel Streams

Page 11: Java 8 Concurrency Updates

Collectors

groupingByConcurrent()toConcurrentMap()

Parallel Streams

Page 12: Java 8 Concurrency Updates

size parallel [ns] sequential [ns] ratio1 77 51 -34%10 7695 578 -92%100 5461 6172 +13%

1000 25818 60636 +135%10000 181363 621829 +243%

100000 1287799 6829144 +430%1000000 12858699 70854694 +451%

Math.sin()

Parallel Streams

Page 13: Java 8 Concurrency Updates

Rule 1:

Fast functions and predicates

Parallel Streams

Page 14: Java 8 Concurrency Updates

Rule 2:

Avoid side effects

Parallel Streams

Page 15: Java 8 Concurrency Updates

Rule 3:

Don't parallel() everything

Parallel Streams

Page 16: Java 8 Concurrency Updates

ConcurrentHashMap

Page 17: Java 8 Concurrency Updates

No more memory pitfall :)

ConcurrentHashMap

Page 18: Java 8 Concurrency Updates

Concurrency level

ConcurrentHashMap

Page 19: Java 8 Concurrency Updates

Load factor

ConcurrentHashMap

Page 20: Java 8 Concurrency Updates

Treeification

ConcurrentHashMap

Page 21: Java 8 Concurrency Updates

Striped64

Page 22: Java 8 Concurrency Updates

Power behindLong/DoubleAdder

andLong/DoubleAccumulator

Striped64

Page 23: Java 8 Concurrency Updates

LongAdder

increment()decrement()add(+/-42)sum()

Striped64

Page 24: Java 8 Concurrency Updates

T110

Striped64

Page 25: Java 8 Concurrency Updates

T1 T27 3

Striped64

Page 26: Java 8 Concurrency Updates

T1 T2 T3 T43 2 4 1

Striped64

Page 27: Java 8 Concurrency Updates

CompletableFuture

Page 28: Java 8 Concurrency Updates

@sun.misc.Contented

Page 29: Java 8 Concurrency Updates

class FalseSharing { int a; int b;

}

--)(----)(--AB)(----)(--

@Contended

Page 30: Java 8 Concurrency Updates

class FalseSharing { int a; @Contended int b;

}

--)(-A##)(####)(##B#)(##

@Contended

Page 31: Java 8 Concurrency Updates

StampedLock

Page 32: Java 8 Concurrency Updates

Fence Intrinsics

Page 33: Java 8 Concurrency Updates

Parallel Array Sorting

Page 34: Java 8 Concurrency Updates

CountedCompleter

Page 35: Java 8 Concurrency Updates

Feedback!

http://goo.gl/forms/PN3u8NY37f

Page 36: Java 8 Concurrency Updates

Questions?