java 8 concurrency updates
DESCRIPTION
More at https://github.com/dmnlukasik/java-8-concurrency-updatesTRANSCRIPT
![Page 1: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/1.jpg)
Java 8 Concurrency Updates
Damian Łukasik
![Page 2: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/2.jpg)
Parallel Streams
ConcurrentHashMap
Striped64
CompletableFuture
@Contended
![Page 3: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/3.jpg)
Parallel streams
![Page 4: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/6.jpg)
ForkJoinPool.commonPool()
Parallel Streams
![Page 7: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/7.jpg)
ForkJoinPool forkJoinPool = new ForkJoinPool(1);
forkJoinPool.submit(() -> ints.parallelStream()
.forEach(e -> counter[0]++)).get();
>> 10000
Parallel Streams
![Page 8: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/8.jpg)
List<Integer> ints = range(1, 5)
List<Integer> collected = ints
.parallelStream()
.collect(Collectors.toList());
print(collected)>> ???
Parallel Streams
![Page 9: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/10.jpg)
Collector.Characteristics.CONCURRENT
Parallel Streams
![Page 11: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/11.jpg)
Collectors
groupingByConcurrent()toConcurrentMap()
Parallel Streams
![Page 12: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/13.jpg)
Rule 1:
Fast functions and predicates
Parallel Streams
![Page 14: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/14.jpg)
Rule 2:
Avoid side effects
Parallel Streams
![Page 15: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/15.jpg)
Rule 3:
Don't parallel() everything
Parallel Streams
![Page 16: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/16.jpg)
ConcurrentHashMap
![Page 17: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/17.jpg)
No more memory pitfall :)
ConcurrentHashMap
![Page 18: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/18.jpg)
Concurrency level
ConcurrentHashMap
![Page 19: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/19.jpg)
Load factor
ConcurrentHashMap
![Page 20: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/20.jpg)
Treeification
ConcurrentHashMap
![Page 21: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/21.jpg)
Striped64
![Page 22: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/22.jpg)
Power behindLong/DoubleAdder
andLong/DoubleAccumulator
Striped64
![Page 23: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/23.jpg)
LongAdder
increment()decrement()add(+/-42)sum()
Striped64
![Page 24: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/24.jpg)
T110
Striped64
![Page 25: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/25.jpg)
T1 T27 3
Striped64
![Page 26: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/26.jpg)
T1 T2 T3 T43 2 4 1
Striped64
![Page 27: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/27.jpg)
CompletableFuture
![Page 28: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/28.jpg)
@sun.misc.Contented
![Page 29: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/29.jpg)
class FalseSharing { int a; int b;
}
--)(----)(--AB)(----)(--
@Contended
![Page 30: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/30.jpg)
class FalseSharing { int a; @Contended int b;
}
--)(-A##)(####)(##B#)(##
@Contended
![Page 31: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/31.jpg)
StampedLock
![Page 32: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/32.jpg)
Fence Intrinsics
![Page 33: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/33.jpg)
Parallel Array Sorting
![Page 34: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/34.jpg)
CountedCompleter
![Page 35: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/35.jpg)
Feedback!
http://goo.gl/forms/PN3u8NY37f
![Page 36: Java 8 Concurrency Updates](https://reader034.vdocuments.site/reader034/viewer/2022052622/559423a71a28abf5568b4666/html5/thumbnails/36.jpg)
Questions?