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



Odpovedet emailem