Ja jsem ten kod uvadel proto, aby bylo videt, ze ten Vas scenar neni mozny. Odkaz na alokovanou pamet je na zasobniku a ten je privatni pro dane vlakno.
Jinak kdyz jste zabrousil k izolacnim urovnim, tak si neodpustim poznamku. Izolacni urovne byly definovany v SQL'89 "specifikaci", tj. tim, jak ovlivnuji pohled klienta na databazi. Jak se ovsem brzy ukazalo, definice to nebyla moc presna a pro pochopeni toho, jak skutecne funguji, je temer nezbytne seznamit se s implementaci pomoci zamku (ackoliv nekdo muze namitnout, ze implementovany mohou byt i jinak - a bude mit pravdu). Z.T. -- Zdenek Tronicek Department of Computer Science and Engineering Prague tel: +420 2 2435 7410 http://cs.felk.cvut.cz/~tronicek Cituji z emailu od Lukas Barton <[EMAIL PROTECTED]>: > Ale je to mozne, cituji z kapitoly 17 specifikace: > > *These semantics do not prescribe how a multithreaded program should be > executed. Rather, they describe the behaviors that multithreaded > programs are allowed to exhibit. Any execution strategy that generates > only allowed behaviors is an acceptable execution strategy.* > > Rozlisujte specifikaci a implementaci. > Nize uvedene je IMHO naprosto irelevantni. At si to konkretni JVM > prelozi do instrukci pro konkretni procesor jak uzna za vhodne. Je uplne > jedno, ze treba JVM od Sunu na procesoru od Intelu to dela tak jak > pisete (a kdovi jak to pak dela ten procesor). > > Kdyz by ve drive uvedenom kodu bylo v konstruktoru > > misto y = 4; napr. volani nekam pres sit s ulozenim casu volani na tom miste > v siti > > a stejne tak misto int j = f.y; // could see 0 > > > *Mohl byste na tom vzdalenem serveru videt prichozi volani v opacnem > poradi a zadna java speficikace by nebyla porusena! > > > * > Je to podne jako s ACID a urovni izolace transakci. Mate jen > specifikovano, jak to klient vidi. Nikoliv jak je to na konkretnim > databazovem serveru implementovane. Ten si muze delat jakakoliv kouzla > (a delat je bude aby dosahl lepsiho vykonu). > > > Zdeněk Troníček wrote: > > Toto v Jave neni mozne. K alokaci pameti v JVM slouzi instrukce new, jejimz > > parametrem je trida, od niz chceme vytvorit instanci (presneji je to index > do > > constant poolu, kde je polozka popisujici tuto tridu). > > Napr.: > > > > Box p = new Box(); > > > > se prelozi takto (uvadim vystup z javap -c): > > > > 0: new #2; //class vlakna/Box > > 3: dup > > 4: invokespecial #3; //Method vlakna/Box."<init>":()V > > 7: astore_1 > > > > Instrukce new na radku 0 provede alokaci pameti a vynulovani (tj. atributy > se > > nastavi na defaultni hodnoty). Ukazatel na alokovanou pamet je na > zasobniku! A > > k tomuto zasobniku ma pochopitelne pristup jen vlakno, kteremu zasobnik > patri. > > Pokud jde o ty dalsi instrukce, tak dup provede duplikaci hodnoty na > vrcholu > > zasobniku a invokespecial zavola konstruktor. Konstruktor vyzvedne parametr > > (this) z vrcholu zasobniku. Instrukce astore_1 provede prirazeni reference > na > > vrcholu zasobniku (tj. odkazu na vytvoreny objekt) do slotu 1 (promenna p > je ve > > slotu 1, protoze ve slotu 0 je args - jde o kod z metody main). > > > > Jave zdar, > > > > Z.T. > > > >
