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