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.
> >
>
>


Odpovedet emailem