Penso che il testo che stai citando sia errato. L'intera idea del modello di memoria Java è di occuparsi delle complesse ottimizzazioni dell'hardware moderno software &, in modo che i programmatori possano determinare quali scritture sono visibili dalle rispettive letture in altri thread.
A meno che un programma in Java sia correttamente sincronizzato, non è possibile garantire che le modifiche apportate da un thread siano immediatamente visibili ad altri thread. Forse il testo si riferisce a un modello di memoria molto specifico (e debole).
L'utilizzo di variabili volatili è solo un modo per sincronizzare i thread e non è adatto a tutti gli scenari.
--Edit--
credo di aver capito la confusione ora ... Sono d'accordo con David Schwartz, partendo dal presupposto che:
1) "modifica una risorsa processo", l'attuale modificare della risorsa, non solo l'esecuzione di un'istruzione di scrittura scritta in un linguaggio di computer di alto livello.
2) "è immediatamente visibile per thread figlio" significa che altri thread sono in grado per vederlo; non significa che un thread nel tuo programma lo vedrà necessariamente. Potrebbe essere comunque necessario utilizzare gli strumenti di sincronizzazione per disabilitare le ottimizzazioni che ignorano l'effettivo accesso alla risorsa.
fonte
2013-04-28 05:11:23
Se si parla di volatile, è necessario specificare anche la lingua. In C e C++, volatile è generalmente inutile per la sincronizzazione dei thread, mentre in Java è utile. –
@doomster, grazie ma credo che 'volatile' abbia lo stesso ruolo in Java e in C++, potresti spiegare perché è diverso dalla tua parte? – MrROY
Sono simili nell'intento, ma non equivalenti. In Java, hai garanzie molto specifiche riguardo il loro comportamento nei programmi multithread. Per C++, vedere http://stackoverflow.com/q/2484980/1968182. –