Final keyword in java is known to forbid class extension and modification of the fields. It is less known to have special meaning in multithreaded code.
Unfortunately, there is not that much information on the latter, and even most thorough talks avoid deep details on the beauty of finals.
In this talk I apply section 17.5 of java language specification to different examples and show how the spec works. Several myths are busted on the way.
Here's nice article on different aspects of JMM: http://shipilev.net/blog/2014/jmm-pragmatics/