@hcubyc: Nie upieram się, jako że sam jestem jeszcze bardzo niedoświadczony jednakże zaciekawiło mnie to:
Zadeklarowanie zmiennej jako volatile informuje kompilator, że wątki odczytujące wartość takiej zmiennej zawsze powinny widzieć jej aktualną wartość i że powinna być zachowana kolejność operacji na tej zmiennej wynikająca z kodu programu.
Można powiedzieć, że zmienne volatile wprowadzają do programów współbieżnych słabą synchronizację - bez możliwości zawieszenia wątku.
Model pamięci języka Java gwarantuje atomowość operacji odczytu i zapisu zmiennych, ale tylko dla typów o rozmiarze do 32-bitów włącznie. W przypadku typów 64-bitowych, jak double lub long odczyt i zapis zmiennej bywa dzielony na dwie operacje 32-bitowe, co może wpłynąć na wynik programu współbieżnego. Zastosowanie modyfikatora volatile w deklaracji zmiennej gwarantuje, że do tego nie dojdzie.