Ahoj, problem v jave je v memory modelu v tom, ze pokud bezite na viceprocessorove masine, pak vam spravny obsah pameti zajisti bud mit promennou volatile (necachuje se a tudis se vzdy cte z hlavni pameti) a nebo pouziti synchronized, protoze pri opousteni synchronized sekce se invaluduje cache a tim se zajisti "prenos" dat mezi procesory.
Tj. pokud mate viceprocesorovy stroj a nepouzivate synchronized muzete se dockat podivnych veci. Jirka Zdeněk Troníček napsal(a): > > 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. -- Jiří Mareš (mailto:[EMAIL PROTECTED]) ČSAD SVT Praha, s.r.o. (http://www.svt.cz) Czech Republic
