Java synchronized blocks are either methods or blocks within methods which are synchronized. Synchronized blocks help solve concurrency problems like race conditions, data visibility, instruction reordering etc.
A Java synchronized block is synchronized on a specific "monitor object". Only one thread can enter any synchronized block synchronized on the same monitor object. Multiple synchronized blocks can be synchronized on a shared monitor object.
Chapters
0:00 Java synchronized - introduction
0:10 Java synchronized keyword
0:15 Synchronized instance methods
0:55 Synchronized blocks inside instance methods
1:36 Synchronized block monitor objects
6:15 Example of threads calling synchronized instance methods on a shared object
8:59 Synchronized static methods
11:21 Using both synchronized static and instance methods
13:44 Using different monitor objects for synchronized blocks within same class
15:25 Sharing monitor objects across different class instances (objects)
16:23 Monitor objects cannot be null
16:50 Example of sharing monitor objects across objects
20:58 Don't use String constant objects as monitor objects
22:13 Java synchronized blocks inside Java Lambda Expressions
25:34 Java synchronized block reentrance rules
27:41 Java synchronized block data change visibility guarantee
33:14 Java synchronized block visibility example
36:00 Java synchronized block happens before guarantee
40:48 Java syncronized block limitations
42:42 Java synchronized block performance overhead
43:56 Java syncrhronized blocks in clustered setups
Java Memory Model - JSR 133
https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
Java volatile tutorial - textual / video:
http://tutorials.jenkov.com/java-concurrency/volatile.html
https://www.youtube.com/watch?v=nhYIEqt-jvY
Java Concurrency & Multithreading Playlist
https://www.youtube.com/playlist?list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4
Java Memory Model
http://tutorials.jenkov.com/java-concurrency/java-happens-before-guarantee.html
https://www.youtube.com/watch?v=LCSqZyjBwWA&list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4&index=4&t=803s
Java Happens Before Guarantee
http://tutorials.jenkov.com/java-concurrency/java-happens-before-guarantee.html
https://www.youtube.com/watch?v=oY14UyP61F8
Java Lambda Expressions
http://tutorials.jenkov.com/java/lambda-expressions.html
https://www.youtube.com/playlist?list=PLL8woMHwr36HQhhPPdV_T8rigbuywMpD7