Dato le seguenti classi:Valore di ritorno dell'operatore assegnazione nel codice concomitante
class Foo {
public volatile int number;
public int method1() {
int ret = number = 1;
return ret;
}
public int method2() {
int ret = number = 2;
return ret;
}
}
e dato più thread chiamando method1()
e method2()
contemporaneamente sullo stesso Foo
esempio, può una chiamata a method1() mai restituire qualcosa di diverso 1?
Potrebbe essere consentita questa ottimizzazione per i campi ['volatile'] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.4)? – trashgod
Sono curioso però, se è quello che intendevano le specifiche. Penso che possano aver specificato b in "e quindi assegna il valore di b a a" solo per chiarire il tutto nel caso in cui a, b e c abbiano tipi diversi (diciamo tipi primitivi interi/floating) e le conversioni avvengano, l'assegnazione avviene come se fosse stato utilizzato il valore convertito. Ad esempio, se a e c erano doppi e b era un galleggiante. – BeeOnRope
@BeeOnRope Questo è del tutto possibile: la pagina JLS sembra essere più interessata alle conversioni di tipo che ai campi volatili. – Bringer128