Cituji z emailu od Lukas Barton <[EMAIL PROTECTED]>: > Zdeněk Troníček wrote: > > Tak jeste jednou: > > Trida p = new Trida(); > > > > V okamziku kdy new vrati odkaz na nove vytvoreny objekt, je tento objekt > > inicializovan (zajistuje to tzv. Initialization safety). To implikuje napr. > to, > > ze finalni promenne maji nastaveny hodnoty. > > Jak muze jine vlakno ziskat odkaz na takto vytvoreny objekt drive nez dojde > k > > navratu z new? (Krome zminene moznosti predani odkazu v konstruktoru > Tridy). > > Mohl bys naznacit jak to bude vypadat v kodu? > > > Uvedu tedy kod primo ze specifikace: > > http://java.sun.com/docs/books/jls/third_edition/html/memory.html#66562 > > class FinalFieldExample { > final int x; > int y; > static FinalFieldExample f; > public FinalFieldExample() { > x = 3; > y = 4; > } > static void writer() { > f = new FinalFieldExample(); > } > static void reader() { > if (f != null) { > int i = f.x; // guaranteed to see 3 > int j = f.y; // could see 0 > } > } > }
Hmm. Hezke. To ovsem neni ani nahodou odpoved na moji otazku "Jak muze vlakno ziskat odkaz na objekt vytvareny v jinem vlakne drive nez dojde k navratu z new". > > > > > Tak ted uz Ti vubec nerozumim. Co tedy rikas? Ze hodnoty finalnich > promennych > > jsou vzdy nastaveny spravne nebo ze objekt nemusi byt inicializovan, > protoze > > muze dojit k prehazeni poradi instrukci? > Hodnoty finalnich promennych jsou nastaveny spravne. > Ostatni muzou byt pro jine vlakno v nedefinovanem stavu (viz priklad vyse). Takze jsme se po nekolika mailech shodli na tom, co jsem psal v prvnim mailu? :o). Mimochodem, ten stav tech promennych neni nedefinovany, jen nemusi byt aktualni. Z.T. -- Zdenek Tronicek Department of Computer Science and Engineering Prague tel: +420 2 2435 7410 http://cs.felk.cvut.cz/~tronicek
