Dlaczego nie może być wielu writerów?
Volatile nie gwarantuje że zapisy są atomowe. Gwarantuje jedynie że odczyt weźmie ostatnią zapisaną wartość i że odczyt wykona się po zakończeniu zapisu. Nie ma żadnej gwarancji ze dwa zapisy do tej samej zmiennej nie będą się przeplatać. Weź pod uwagę że zapis zmiennej nie musi byc operacją atomową na poziomie CPU. Twoje CPU ma pewnie 64 bity i na takich słowach umie operować. Jak masz zmienną 128 bitową, to jej zapis nie jest fizycznie możliwy do zrealizowania w 1 ticku!
Jeśli więc zapis takiej zmiennej wymaga 2 operacji, każda na 64 bitowym słowie, to nie masz gwarancji że 2 zapisy jednocześnie nie wygenerują ci niespójnego stanu, gdzie jedna połówka zmiennej została zapisana przez wątek X a druga przez wątek Y.
Przy okazji volatile zapewnia też atomowość odczytu, tzn jeśli odczytujesz zmienną której nie da się odczytać atomowo (np. tą naszą 128 bitową) to volatile zapewnia że w trakcie odczytu nikt nam jej w połowie nie zmieni.
https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html