Урок 1.00:05:07
How the course came about
Урок 2.00:11:18
Questions and exercises
Урок 3.00:04:09
History of concurrency
Урок 4.00:09:47
Benefits of threads
Урок 5.00:08:20
Risks of threads
Урок 6.00:03:59
Threads are everywhere
Урок 7.00:23:16
Short Java 7 & 8 primer
Урок 8.00:04:55
Exercises
Урок 9.00:05:28
Exercise Walkthrough: Setting up your IDE
Урок 10.00:04:12
Exercise Walkthrough: Annotating Persons
Урок 11.00:09:59
Stack vs heap memory
Урок 12.00:05:26
Synchronization, Latent defects
Урок 13.00:09:06
Atomicity
Урок 14.00:08:38
Visibility
Урок 15.00:07:38
Confinement
Урок 16.00:15:55
Immutability
Урок 17.00:08:49
Designing a thread-safe class
Урок 18.00:04:20
Exercises
Урок 19.00:04:11
Exercise Walkthrough: Thread confined DateFormat
Урок 20.00:02:11
Exercise Walkthrough: Stack confined DateFormat
Урок 21.00:01:32
Exercise Walkthrough: Object confined DateFormat
Урок 22.00:02:47
Exercise Walkthrough: New DateTimeFormatter
Урок 23.00:05:33
Exercise Walkthrough: ByteGenerator
Урок 24.00:13:07
Synchronized collections
Урок 25.00:08:39
Concurrent collections
Урок 26.00:10:07
Livelock with ConcurrentHashMap.computeIfAbsent()
Урок 27.00:10:46
CopyOnWrite collections
Урок 28.00:15:58
BlockingQueue & producer-consumer
Урок 29.00:05:24
Semaphore
Урок 30.00:04:42
CountDownLatch
Урок 31.00:07:46
Phaser
Урок 32.00:02:27
Exercises
Урок 33.00:19:58
Exercise Walkthrough: ConcurrentModificationException
Урок 34.00:12:37
Exercise Walkthrough: PriorityBlockingQueue
Урок 35.00:04:37
Introduction
Урок 36.00:08:45
The executor framework
Урок 37.00:07:23
ScheduledExecutorService
Урок 38.00:06:33
Executor lifecycle
Урок 39.00:07:21
Finding exploitable parallelism
Урок 40.00:06:03
Callable and Future
Урок 41.00:06:51
CompletionService
Урок 42.00:15:54
CompletableFuture
Урок 43.00:06:35
Using parallel streams
Урок 44.00:01:45
Exercises
Урок 45.00:09:42
Exercise Walkthrough: Parallel factorizer
Урок 46.00:04:28
Exercise Walkthrough: Parallel stream factorizer
Урок 47.00:11:26
Introduction & Motivation
Урок 48.00:05:06
Cooperative vs preemptive
Урок 49.00:13:56
Policies in dealing with InterruptedException
Урок 50.00:11:56
Code sample with Future.cancel(true)
Урок 51.00:07:10
FutureTask life cycle & Java 8 streams
Урок 52.00:07:18
Timed tasks & non-interruptible tasks
Урок 53.00:00:58
Exercises
Урок 54.00:07:36
Exercise Walkthrough: Make the factorizer cancelable
Урок 55.00:12:40
Sizing thread pools, compute vs IO tasks
Урок 56.00:03:36
Mixing CPU and IO intensive tasks
Урок 57.00:24:00
Thread creation cost amortization
Урок 58.00:06:48
Fixed vs cached thread pool configurations
Урок 59.00:06:48
Saturation policies & thread factories
Урок 60.00:03:04
Exercises
Урок 61.00:05:51
Exercise Walkthrough: ThreadPoolSupplier
Урок 62.00:06:17
Exercise Walkthrough: Thread Pool MBean
Урок 63.00:04:08
Exercise Walkthrough: Sizing ThreadPoolExecutor
Урок 64.00:03:56
Introduction
Урок 65.00:06:17
ForkJoinPool and ForkJoinTask
Урок 66.00:13:16
Parallelizing Fibonacci with Fork:Join
Урок 67.00:17:05
ManagedBlocker
Урок 68.00:04:27
Canceling a task and summary
Урок 69.00:07:27
Exercises
Урок 70.00:14:54
Exercise Walkthrough: Puzzle solver with ForkJoin
Урок 71.00:13:12
Exercise Walkthrough: Streams instead of ForkJoin
Урок 72.00:02:33
Introduction
Урок 73.00:10:16
Deadlocks
Урок 74.00:09:52
Lock ordering with System.identityHashCode()
Урок 75.00:07:02
Benefits of open calls
Урок 76.00:08:12
Deadlock in java.util.Vector
Урок 77.00:18:22
Avoiding and diagnosing deadlocks
Урок 78.00:07:37
Livelocks
Урок 79.00:04:16
Exercises
Урок 80.00:03:47
Exercise Walkthrough: Solve deadlocks via lock ordering
Урок 81.00:11:17
Exercise Walkthrough: Find and eliminate deadlock
Урок 82.00:03:22
Exercise Walkthrough: Bonus deadlock puzzle
Урок 83.00:06:56
Introduction
Урок 84.00:07:23
Automatic tooling
Урок 85.00:13:15
Bulk updates
Урок 86.00:04:02
Repairing the race condition
Урок 87.00:05:44
Testing for performance
Урок 88.00:03:54
Exercises
Урок 89.00:15:44
Exercise Walkthrough: HandoverQueue test
Урок 90.00:07:19
Exercise Walkthrough: LinkedTransferQueue test
Урок 91.00:07:13
Introduction
Урок 92.00:09:14
Amdahl's & Little's laws
Урок 93.00:12:47
Costs introduced by context switching
Урок 94.00:06:22
Reducing lock contention
Урок 95.00:06:33
Lock splitting & lock striping
Урок 96.00:07:24
Monitoring CPU utilization to spot contention
Урок 97.00:00:57
Introduction
Урок 98.00:08:06
AutoCloseable locks
Урок 99.00:03:15
Avoiding deadlocks using tryLock()
Урок 100.00:03:34
Performance synchronized vs ReentrantLock
Урок 101.00:05:23
When to use ReentrantLock
Урок 102.00:06:07
ReentrantReadWriteLock
Урок 103.00:13:58
StampedLock from Java 8
Урок 104.00:02:34
Exercises
Урок 105.00:07:59
Exercise Walkthrough: Better WalkingCollection
Урок 106.00:05:58
Exercise Walkthrough: tryLock() for solving deadlocks
Урок 107.00:22:25
Exercise Walkthrough: StampedLock with IntList
Урок 108.00:03:16
Introduction
Урок 109.00:10:38
Managing state dependence
Урок 110.00:12:21
Using condition queues
Урок 111.00:08:56
Explicit condition objects
Урок 112.00:01:31
Exercises
Урок 113.00:17:31
Exercise Walkthrough: FutureResultIterable
Урок 114.00:09:28
Introduction
Урок 115.00:23:46
CompareAndSwap & VarHandles
Урок 116.00:20:01
Shared cache lines & sun.misc.Contended
Урок 117.00:06:42
Atomic variable classes
Урок 118.00:06:05
Nonblocking algorithms
Урок 119.00:04:16
Exercises
Урок 120.00:08:36
Exercise Walkthrough: Make an atomic BankAccount
Урок 121.00:04:27
Introduction
Урок 122.00:11:09
Garbage collection
Урок 123.00:06:39
Throughput collector
Урок 124.00:15:39
-XX:+PrintFlagsFinal
Урок 125.00:05:50
ConcurrentMarkSweep
Урок 126.00:08:31
G1
Урок 127.00:18:45
Heap sizing
Урок 128.00:01:57
Exercises
Урок 129.00:10:17
Exercise Walkthrough: Tune different garbage collectors
Урок 130.00:02:30
Introduction
Урок 131.00:16:41
SoftReference
Урок 132.00:31:54
WeakReference
Урок 133.00:12:17
PhantomReference
Урок 134.00:02:08
Exercises
Урок 135.00:03:23
Exercise Walkthrough: FailFastCollection with WeakReferences
Урок 136.00:01:36
Introduction
Урок 137.00:12:15
Big gains quickly
Урок 138.00:04:40
The Box
Урок 139.00:02:55
Consumers of CPU
Урок 140.00:07:12
Microbenchmarking
Урок 141.00:02:45
Exercises
Урок 142.00:16:13
Exercise Walkthrough: Microbenchmark example
Урок 143.00:12:24
Just-in-time compiler
Урок 144.00:08:29
Hotspot and tiered compilation
Урок 145.00:05:24
Exercises
Урок 146.00:07:37
Exercise Walkthrough: Compare JIT settings
Урок 147.00:03:12
Exercise Walkthrough: Profiling with JVisualVM
Урок 148.00:01:23
Introduction
Урок 149.00:05:13
Object creation
Урок 150.00:37:50
Strings
Урок 151.00:02:54
Regular expressions & exceptions
Урок 152.00:12:42
Faster loops & other tricks
Урок 153.00:01:33
Exercises
Урок 154.00:20:30
Exercise Walkthrough: Make a fast Validator
Урок 155.00:08:48
That's it, folks!