|  | 		    
					
        
         
          
         
	
          | |  | Simon vs. OverMagten...[autonummerering]. Fra : Simon...
 | 
 Dato :  23-08-02 17:01
 | 
 |  | Hejsa,
 
 Så er det sket igen.... jeg har et problem.. denne gang mener mine lærere
 godt nok det ikke kan løses, men jeg ville nu spørge jer alligevel, da i for
 det meste, lyder somom i ved mere end dem :)
 
 hvis nu, jeg har en klasse med en main, og en klasse, fx. bil, og jeg gerne
 vil have noget autonummerering på obj numrene, then how to do it ??:
 
 
 
 main:
 
 Bil bil.autoNummerering() = new Bil("750 hk", "blå");
 
 
 
 
 kan man så ikke lave en metode i klassen Bil, der kan give mig noget
 autonummerering, jeg var ude i noget lign. det her:
 
 
 
 
 Bil:
 
 private int nummer = 1;
 private String hovedDel = new String("BilNr");
 
 public String autoNummerering()
 {
 String report = new String(hovedDel);
 report += nummer;
 nummer++;
 
 return report;
 }
 
 
 
 
 så ville jeg have mine obj, kom til at hede noget henad: "BilNr1",
 "BilNr2"....
 
 jeg kan godt se problemet i at jeg returnerer en String, som skal være
 navnet, men kan det ikke afhjælpes ?
 - hvis jeg ikke vil lægge mine objekter i et array... .?
 
 
 Nu har jeg prøvet at finde en løsning i nogle dage før jeg spurgte mine
 lærere, men nu synes jeg at være løbet ind i en mur.... en stor en.. kunne
 ikke engang finde noget på google :((
 
 
 
 1000 tak
 
 mvh.Simon
 
 
 
 
 
 
 |  |  | 
  Michael Banzon (23-08-2002) 
 
	
          | |  | Kommentar Fra : Michael Banzon
 | 
 Dato :  23-08-02 17:18
 | 
 |  | 
 
            Jeg ved ikke lige helt...
 Du kunne lave en klasse (nogenlunde) sådan her:
 public class Bil {
    public static int num;
    private String s1;
    private String s2;
    private String nummer;
    public Bil(String str1, String str2) {
       s1 = str1;
       s2 = str2;
       nummer = new String("BilNr" + new                      Integer(num++).toString());
    }
    public static initBiler() {
       num=1;
    }
 }
 så skal du bare kalde Bil.initBiler() en enkelt gang, så er du klar til 
 at lave nye autonummererede Bil-objekter (der er muligvis nogle 
 Exceptions der skal catches??)...
   jeg har ikke testet det, men mener at det burde virke?? hvad siger i 
 andre??
 / Michael
 Simon... wrote:
 > Hejsa,
 > 
 > Så er det sket igen.... jeg har et problem.. denne gang mener mine lærere
 > godt nok det ikke kan løses, men jeg ville nu spørge jer alligevel, da i for
 > det meste, lyder somom i ved mere end dem :)
 > 
 > hvis nu, jeg har en klasse med en main, og en klasse, fx. bil, og jeg gerne
 > vil have noget autonummerering på obj numrene, then how to do it ??:
 > 
 > 
 > 
 > main:
 > 
 >         Bil bil.autoNummerering() = new Bil("750 hk", "blå");
 > 
 > 
 > 
 > 
 > kan man så ikke lave en metode i klassen Bil, der kan give mig noget
 > autonummerering, jeg var ude i noget lign. det her:
 > 
 > 
 > 
 > 
 > Bil:
 > 
 > private int nummer = 1;
 > private String hovedDel = new String("BilNr");
 > 
 > public String autoNummerering()
 > {
 >     String report = new String(hovedDel);
 >     report += nummer;
 >     nummer++;
 > 
 >     return report;
 > }
 > 
 > 
 > 
 > 
 > så ville jeg have mine obj, kom til at hede noget henad: "BilNr1",
 > "BilNr2"....
 > 
 > jeg kan godt se problemet i at jeg returnerer en String, som skal være
 > navnet, men kan det ikke afhjælpes ?
 > - hvis jeg ikke vil lægge mine objekter i et array... .?
 > 
 > 
 > Nu har jeg prøvet at finde en løsning i nogle dage før jeg spurgte mine
 > lærere, men nu synes jeg at være løbet ind i en mur.... en stor en.. kunne
 > ikke engang finde noget på google :((
 > 
 > 
 > 
 > 1000 tak
 > 
 > mvh.Simon
 > 
 > 
 > 
 >
            
             |  |  | 
  Ulrik Magnusson (23-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  23-08-02 18:01
 | 
 |  | "Simon..." wrote:
 
 > Hejsa,
 >
 > Så er det sket igen.... jeg har et problem.. denne gang mener mine lærere
 > godt nok det ikke kan løses, men jeg ville nu spørge jer alligevel, da i for
 > det meste, lyder somom i ved mere end dem :)
 >
 > hvis nu, jeg har en klasse med en main, og en klasse, fx. bil, og jeg gerne
 > vil have noget autonummerering på obj numrene, then how to do it ??:
 >
 > main:
 >
 >         Bil bil.autoNummerering() = new Bil("750 hk", "blå");
 >
 > kan man så ikke lave en metode i klassen Bil, der kan give mig noget
 > autonummerering, jeg var ude i noget lign. det her:
 >
 > Bil:
 >
 > private int nummer = 1;
 > private String hovedDel = new String("BilNr");
 >
 > public String autoNummerering()
 > {
 >     String report = new String(hovedDel);
 >     report += nummer;
 >     nummer++;
 >
 >     return report;
 > }
 >
 > så ville jeg have mine obj, kom til at hede noget henad: "BilNr1",
 > "BilNr2"....
 
 Måske noget i denne retning:
 
 class Bil
 {
 private static int idCount = 1;//tæller på klassen
 private int id = idCount++;// giv et id og inkrementer klassevariablen ved
 konstruktion
 private String name = "Bil nr. ";
 Bil()
 {
 name += id;
 }
 String getName()
 {
 return name;
 }
 }
 
 Spørgsmålet er så måske om
 private int id = idCount++;// giv et id og inkrementer klassevariablen ved
 konstruktion
 er trådsikker?
 
 Ulrik Magnusson
 
 
 
 |  |  | 
  Dennis B. Hansen (26-08-2002) 
 
	
          | |  | Kommentar Fra : Dennis B. Hansen
 | 
 Dato :  26-08-02 10:08
 | 
 |  | Tjoo... Increment (optælling) af en int variable er trådsikker, så du
 vil ikke få biler med samme numre. Altså med mindre du lukker
 applikationen ned og starter den op igen, for både din (Ulrik) og
 Michael Banzons løsning lider af samme problem; at de kun tæller op
 for en applikations kørsel af gangen. Problemet kan dog hurtigt løses
 ved at gemem "tælleren" i en fil/database.
 
 Men det er også lige meget... Synes bare lige jeg ville sige lidt om
 "static", da den statiske variabel ikke er forklaret i nogen af jeres
 indlæg.
 
 Static variable og metoder kaldes også "klasse variable/metoder", da
 man kan operere med den uafhængigt af de enkelte instancer af klassen
 (objekter). Det bevirker i begge eksempler at man kan lave en tæller
 der holder styr på hvor mange objekter der er lavet af en klasse,
 hvilket jo basalt set er det der er behov for i Simons spørgsmål.
 
 Hygge
 /Dennis
 
 On Fri, 23 Aug 2002 19:00:49 +0200, Ulrik Magnusson <ulrikm@yahoo.com>
 wrote:
 
 >"Simon..." wrote:
 >
 >> Hejsa,
 >>
 >> Så er det sket igen.... jeg har et problem.. denne gang mener mine lærere
 >> godt nok det ikke kan løses, men jeg ville nu spørge jer alligevel, da i for
 >> det meste, lyder somom i ved mere end dem :)
 >>
 >> hvis nu, jeg har en klasse med en main, og en klasse, fx. bil, og jeg gerne
 >> vil have noget autonummerering på obj numrene, then how to do it ??:
 >>
 >> main:
 >>
 >>         Bil bil.autoNummerering() = new Bil("750 hk", "blå");
 >>
 >> kan man så ikke lave en metode i klassen Bil, der kan give mig noget
 >> autonummerering, jeg var ude i noget lign. det her:
 >>
 >> Bil:
 >>
 >> private int nummer = 1;
 >> private String hovedDel = new String("BilNr");
 >>
 >> public String autoNummerering()
 >> {
 >>     String report = new String(hovedDel);
 >>     report += nummer;
 >>     nummer++;
 >>
 >>     return report;
 >> }
 >>
 >> så ville jeg have mine obj, kom til at hede noget henad: "BilNr1",
 >> "BilNr2"....
 >
 >Måske noget i denne retning:
 >
 >class Bil
 >{
 >    private static int idCount = 1;//tæller på klassen
 >    private int id = idCount++;// giv et id og inkrementer klassevariablen ved
 >konstruktion
 >    private String name = "Bil nr. ";
 >    Bil()
 >    {
 >        name += id;
 >    }
 >    String getName()
 >    {
 >        return name;
 >    }
 >}
 >
 >Spørgsmålet er så måske om
 >   private int id = idCount++;// giv et id og inkrementer klassevariablen ved
 >konstruktion
 > er trådsikker?
 >
 >Ulrik Magnusson
 >
 
 
 
 |  |  | 
   Ulrik Magnusson (26-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  26-08-02 15:52
 | 
 |  | 
 
 "Dennis B. Hansen" wrote:
 
 > Tjoo... Increment (optælling) af en int variable er trådsikker, så du
 > vil ikke få biler med samme numre.
 
 inc er rigtignok trådsikker, men man skal jo have fat i variablen og
 gemme den igen - så nej.
 
 Ulrik Magnusson
 
 
 
 
 
 |  |  | 
    Ulrik Magnusson (26-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  26-08-02 15:57
 | 
 |  | 
 
 Ulrik Magnusson wrote:
 
 > "Dennis B. Hansen" wrote:
 >
 > > Tjoo... Increment (optælling) af en int variable er trådsikker, så du
 > > vil ikke få biler med samme numre.
 >
 > inc er rigtignok trådsikker,
 
 Sikke da noget sludder - increment er overhovedet ikke trådsikker.
 
 Ulrik Magnusson
 
 
 
 
 |  |  | 
     Ulrik Magnusson (26-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  26-08-02 18:35
 | 
 |  | 
 Ulrik Magnusson wrote:
 > Ulrik Magnusson wrote:
 >
 > > "Dennis B. Hansen" wrote:
 > >
 > > > Tjoo... Increment (optælling) af en int variable er trådsikker, så du
 > > > vil ikke få biler med samme numre.
 > >
 > > inc er rigtignok trådsikker,
 >
 > Sikke da noget sludder - increment er overhovedet ikke trådsikker.
 Jeg diskuterer lige med mig selv..    Man kunne måske forestille sig
 følgende (fejlagtige) konstruktion:
 class a
 {
     private int member = 0;
     void incMember()
     {
         int local = member;
         synchronized( this )//meningsløs synkronisering, da "i++" er atomisk
         {
             local++;
         }
         this.member = local;
     }
 }
 På den måde er increment måske trådsikker, men jeg kan ikke se
 en situation hvor man ikke er nødt til at synkronisere omkring den
 alligevel.
 Ulrik Magnusson
            
             |  |  | 
      Jan Jonasen (26-08-2002) 
 
	
          | |  | Kommentar Fra : Jan Jonasen
 | 
 Dato :  26-08-02 18:54
 | 
 |  | 
 
            In article <3D6A66BD.A92815A5@yahoo.com>, Ulrik Magnusson 
 (ulrikm@yahoo.com) wrote:
 > Jeg diskuterer lige med mig selv..    Man kunne måske forestille sig
 > følgende (fejlagtige) konstruktion:
 > 
 > class a
 > {
 >     private int member = 0;
 > 
 >     void incMember()
 >     {
 >         int local = member;
 >         synchronized( this )//meningsløs synkronisering, da "i++" er atomisk
 >         {
 >             local++;
 >         }
 >         this.member = local;
 >     }
 > }
 > 
 > På den måde er increment måske trådsikker, men jeg kan ikke se
 > en situation hvor man ikke er nødt til at synkronisere omkring den
 > alligevel.
 > 
 En mere elegant løsning ville være blot at erklære member som:
 private volatile int member; //nul er default, spar 4 tastetryk    volatile garantere at man altid får seneste værdi, således ville en 
 eventuel getMember() metode ikke returnere en "forkert" værdi. JLS 2.0 
 8.3.2 forklare det bedre end jeg, ca. side 158.
 -- 
                       Mvh/re Jan Jonasen
                       jonasen (at) it (dot) dk
 If I wanted culture, I'd eat yogurt.
            
             |  |  | 
       Ulrik Magnusson (26-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  26-08-02 19:52
 | 
 |  | 
 
            Jan Jonasen wrote:
 > private volatile int member; //nul er default, spar 4 tastetryk    Min mistanke er umiddelbart at man har glemt at initialisere og jeg
 begynder at spilde tid på at undersøge om det skulle have nogen
 betydning.
 Jeg ved ikke rigtig om volatile er en god idé (først og fremmest
 er det lidt svært at gennemskue    ):
 volatile static int idCount = 0;
 int id = idCount++; // er hele denne atomisk pga volatile eller er det
                               // udelukkende inkrementeringen af idCount?
 T1: inkrementer idCount
 T2: inkrementer idCount
 T2: skriv id // med hvilken værdi?
 T1: skriv id // med hvilken værdi?
 Ulrik Magnusson
            
             |  |  | 
        Jan Jonasen (26-08-2002) 
 
	
          | |  | Kommentar Fra : Jan Jonasen
 | 
 Dato :  26-08-02 21:17
 | 
 |  | 
 
            In article <3D6A78D6.D30F700D@yahoo.com>, Ulrik Magnusson 
 (ulrikm@yahoo.com) wrote:
 > Jeg ved ikke rigtig om volatile er en god idé (først og fremmest
 > er det lidt svært at gennemskue    ):
 > 
 Tjo, men det vel mest fordi det sjældent bliver brugt, også af 
 undertegnede, da jeg ikke så ofte står i en situation, som kræver en 100% 
 atomisk counter.
 > volatile static int idCount = 0;
 > int id = idCount++; // er hele denne atomisk pga volatile eller er det
 >                               // udelukkende inkrementeringen af idCount?
 > 
 > T1: inkrementer idCount
 > T2: inkrementer idCount
 > T2: skriv id // med hvilken værdi?
 > T1: skriv id // med hvilken værdi?
 > 
 Vha. volatile kan operationen betragtes som atomisk, JLS benævner ikke ++ 
 operatoren som atomisk i sig selv, men pga. volatile's mening vil ++ altid 
 blive udført på seneste (her største) værdi. Dette medføre at idCount vil 
 være korrekt selvom andre tråde måtte modificere denne, så vil du altid få 
 den største værdi på lige netop det tidspunkt dit id bliver sat.
 -- 
                       Mvh/re Jan Jonasen
                       jonasen (at) it (dot) dk
 If I wanted culture, I'd eat yogurt.
            
             |  |  | 
        Jan Jonasen (26-08-2002) 
 
	
          | |  | Kommentar Fra : Jan Jonasen
 | 
 Dato :  26-08-02 21:17
 | 
 |  | 
 
            In article <3D6A78D6.D30F700D@yahoo.com>, Ulrik Magnusson 
 (ulrikm@yahoo.com) wrote:
 > Jeg ved ikke rigtig om volatile er en god idé (først og fremmest
 > er det lidt svært at gennemskue    ):
 > 
 Tjo, men det vel mest fordi det sjældent bliver brugt, også af 
 undertegnede, da jeg ikke så ofte står i en situation, som kræver en 100% 
 atomisk counter.
 > volatile static int idCount = 0;
 > int id = idCount++; // er hele denne atomisk pga volatile eller er det
 >                               // udelukkende inkrementeringen af idCount?
 > 
 > T1: inkrementer idCount
 > T2: inkrementer idCount
 > T2: skriv id // med hvilken værdi?
 > T1: skriv id // med hvilken værdi?
 > 
 Vha. volatile kan operationen betragtes som atomisk, JLS benævner ikke ++ 
 operatoren som atomisk i sig selv, men pga. volatile's mening vil ++ altid 
 blive udført på seneste (her største) værdi. Dette medføre at idCount vil 
 være korrekt selvom andre tråde måtte modificere denne, så vil du altid få 
 den største værdi på lige netop det tidspunkt dit id bliver sat.
 -- 
                       Mvh/re Jan Jonasen
                       jonasen (at) it (dot) dk
 If I wanted culture, I'd eat yogurt.
            
             |  |  | 
         Ulrik Magnusson (26-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  26-08-02 21:43
 | 
 |  | 
 
 Jan Jonasen wrote:
 
 > > volatile static int idCount = 0;
 > > int id = idCount++; // er hele denne atomisk pga volatile eller er det
 > >                               // udelukkende inkrementeringen af idCount?
 > >
 > > T1: inkrementer idCount
 > > T2: inkrementer idCount
 > > T2: skriv id // med hvilken værdi?
 > > T1: skriv id // med hvilken værdi?
 > >
 > Vha. volatile kan operationen betragtes som atomisk, JLS benævner ikke ++
 > operatoren som atomisk i sig selv, men pga. volatile's mening vil ++ altid
 > blive udført på seneste (her største) værdi. Dette medføre at idCount vil
 > være korrekt selvom andre tråde måtte modificere denne, så vil du altid få
 > den største værdi på lige netop det tidspunkt dit id bliver sat.
 
 og så er man vel alligevel nødt at synkronisere for ikke at få to biler
 med samme id:
 
 public class Bil
 {
 private static int idCount = 1;
 private static Object classSync = new Object();
 
 private int id;
 private String name = "Bil nr. ";
 
 public Bil()
 {
 synchronized( classSync )
 {
 id = idCount++;
 }
 name += id;
 }
 }
 
 Ulrik Magnusson
 
 
 
 |  |  | 
          Morten (27-08-2002) 
 
	
          | |  | Kommentar Fra : Morten
 | 
 Dato :  27-08-02 08:52
 | 
 |  | Ulrik Magnusson wrote:
 >
 > Jan Jonasen wrote:
 >
 >
 >>>volatile static int idCount = 0;
 >>>int id = idCount++; // er hele denne atomisk pga volatile eller er det
 >>>                              // udelukkende inkrementeringen af idCount?
 >>>
 >>>T1: inkrementer idCount
 >>>T2: inkrementer idCount
 >>>T2: skriv id // med hvilken værdi?
 >>>T1: skriv id // med hvilken værdi?
 >>>
 >>
 >>Vha. volatile kan operationen betragtes som atomisk, JLS benævner ikke ++
 >>operatoren som atomisk i sig selv, men pga. volatile's mening vil ++ altid
 >>blive udført på seneste (her største) værdi. Dette medføre at idCount vil
 >>være korrekt selvom andre tråde måtte modificere denne, så vil du altid få
 >>den største værdi på lige netop det tidspunkt dit id bliver sat.
 >
 >
 > og så er man vel alligevel nødt at synkronisere for ikke at få to biler
 > med samme id:
 >
 > public class Bil
 > {
 >     private static int idCount = 1;
 >     private static Object classSync = new Object();
 >
 >     private int id;
 >     private String name = "Bil nr. ";
 >
 >     public Bil()
 >     {
 >         synchronized( classSync )
 >         {
 >             id = idCount++;
 >         }
 >         name += id;
 >     }
 > }
 
 Du bør have din name += id inde i din synchronized block.
 
 T1: id = X
 T2: id = Y
 T1: name += Y
 T2: name += Y
 
 Faren er ikke så meget om ++ på en integer er atomar (hvilken den er,
 i modsætning til tilsvarende operation på en long), men at den
 sammenhæng du bruger den i, er trådsikker.
 
 Mvh Morten
 
 
 
 |  |  | 
           Ulrik Magnusson (27-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  27-08-02 14:27
 | 
 |  | Morten wrote:
 
 >> public class Bil
 >> {
 >>     private static int idCount = 1;
 >>     private static Object classSync = new Object();
 >>
 >>     private int id;
 >>     private String name = "Bil nr. ";
 >>
 >>     public Bil()
 >>     {
 >>         synchronized( classSync )
 >>         {
 >>             id = idCount++;
 >>         }
 >>         name += id;
 >>     }
 >> }
 >
 > Du bør have din name += id inde i din synchronized block.
 >
 > T1: id = X
 > T2: id = Y
 > T1: name += Y
 > T2: name += Y
 
 
 Nej. Synkroniseringen skal udelukkende sikre at inkrementeringen og
 overførselen fra klasse til instans foregår uden afbrydelse (dvs uden
 at andre piller ved idCount imens). Ovenstående kan ikke ske, da 2 tråde
 ikke kan være i samme konstruktor på samme tid (mao. T1.name/T1.id og
 T2.name/T2.id refererer til name og id i 2 forskellige objekter).
 
 Ulrik Magnusson
 
 
 
 
 |  |  | 
          Jan Jonasen (27-08-2002) 
 
	
          | |  | Kommentar Fra : Jan Jonasen
 | 
 Dato :  27-08-02 17:54
 | 
 |  | In article <3D6A92E8.E3A6B263@yahoo.com>, Ulrik Magnusson
 (ulrikm@yahoo.com) wrote:
 > og så er man vel alligevel nødt at synkronisere for ikke at få to biler
 > med samme id:
 >
 > public class Bil
 > {
 >     private static int idCount = 1;
 >     private static Object classSync = new Object();
 >
 >     private int id;
 >     private String name = "Bil nr. ";
 >
 >     public Bil()
 >     {
 >         synchronized( classSync )
 >         {
 >             id = idCount++;
 >         }
 >         name += id;
 >     }
 > }
 >
 Ikke med mindre du også ønsker Bil'er konstrueret i rækkefølge. Volatile
 (på idCount) ville sikre id altid bliver forskellig.
 
 --
 Mvh/re Jan Jonasen
 jonasen (at) it (dot) dk
 
 If I wanted culture, I'd eat yogurt.
 
 
 |  |  | 
           Ulrik Magnusson (27-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  27-08-02 19:00
 | 
 |  | Jan Jonasen wrote:
 
 > In article <3D6A92E8.E3A6B263@yahoo.com>, Ulrik Magnusson
 > (ulrikm@yahoo.com) wrote:
 > > og så er man vel alligevel nødt at synkronisere for ikke at få to biler
 > > med samme id:
 > >
 > > public class Bil
 > > {
 > >     private static int idCount = 1;
 > >     private static Object classSync = new Object();
 > >
 > >     private int id;
 > >     private String name = "Bil nr. ";
 > >
 > >     public Bil()
 > >     {
 > >         synchronized( classSync )
 > >         {
 > >             id = idCount++;
 > >         }
 > >         name += id;
 > >     }
 > > }
 > >
 > Ikke med mindre du også ønsker Bil'er konstrueret i rækkefølge.
 
 ?? - hvordan skal "i rækkefølge" dog forstås?
 
 > Volatile (på idCount) ville sikre id altid bliver forskellig.
 
 Jeg mangler lidt argumentation - kan nedenstående ikke ske
 og hvorfor ikke?
 
 private static volatile int idCount = 0;
 private int id = ++idCount;
 
 T1: idCount = idCount + 1
 T2: idCount = idCount + 1
 T2: id = 2
 T1: id = 2
 
 Ulrik Magnusson
 
 
 
 |  |  | 
            Jan Jonasen (27-08-2002) 
 
	
          | |  | Kommentar Fra : Jan Jonasen
 | 
 Dato :  27-08-02 21:05
 | 
 |  | 
 
            In article <3D6BBE3D.CB655668@yahoo.com>, Ulrik Magnusson 
 (ulrikm@yahoo.com) wrote:
 > ?? - hvordan skal "i rækkefølge" dog forstås?
 > 
 På den måde at først til kommer først tilbage.
 > Jeg mangler lidt argumentation - kan nedenstående ikke ske
 > og hvorfor ikke?
 > 
 > private static volatile int idCount = 0;
 > private int id = ++idCount;
 > 
 > T1: idCount = idCount + 1
 > T2: idCount = idCount + 1
 > T2: id = 2
 > T1: id = 2
 > 
 Af den simple grund at det netop er volatile's opgave at sørge for, at det 
 altid er seneste værdi der benyttes i en given variabel. (går ud fra 
 idCount skal erstattes med id) id vil med idCount i ovenstående tilfælde 
 altid blive unik, sådan er det bare    Eksempel findes i JLS 8.3.1.4, 
 nemmere end min upædagogiske gengivelse.
 -- 
                       Mvh/re Jan Jonasen
                       jonasen (at) it (dot) dk
 If I wanted culture, I'd eat yogurt.
            
             |  |  | 
             Ulrik Magnusson (27-08-2002) 
 
	
          | |  | Kommentar Fra : Ulrik Magnusson
 | 
 Dato :  27-08-02 21:34
 | 
 |  | 
 Jan Jonasen wrote:
 > In article <3D6BBE3D.CB655668@yahoo.com>, Ulrik Magnusson
 > (ulrikm@yahoo.com) wrote:
 > > ?? - hvordan skal "i rækkefølge" dog forstås?
 > >
 > På den måde at først til kommer først tilbage.
 Men hvorfra og hvortil? Her et illustrerende forløb:
 T1: kald super.konstruktor og find synkroniseringsobjekt
 T2: kald super.konstruktor og find synkroniseringsobjekt
 T2: sync blok: id = idCount++
 T2: name += id
 T2: konstruktion af bil færdig
 T1: sync blok: id = idCount++
 T1: name += id
 T1: konstruktion af bil færdig
 > > Jeg mangler lidt argumentation - kan nedenstående ikke ske
 > > og hvorfor ikke?
 > >
 > > private static volatile int idCount = 0;
 > > private int id = ++idCount;
 > >
 > > T1: idCount = idCount + 1
 > > T2: idCount = idCount + 1
 > > T2: id = 2
 > > T1: id = 2
 > >
 > Af den simple grund at det netop er volatile's opgave at sørge for, at det
 > altid er seneste værdi der benyttes i en given variabel. (går ud fra
 > idCount skal erstattes med id) id vil med idCount i ovenstående tilfælde
 > altid blive unik, sådan er det bare    Eksempel findes i JLS 8.3.1.4,
 > nemmere end min upædagogiske gengivelse.
 JLS 8.3.1.4 snakker så vidt jeg kan se kun om opdatering af delte
 variabler (idCount) - ikke om de udelte (id). Problemet er netop
 opdateringen af id som ikke må ske med den samme værdi 2 gange.
 (idCount skal _ikke_ erstattes af id - id tildeles den nyeste værdi af
 idCount ved ovenstående forløb)
 Ulrik Magnusson
            
             |  |  | 
  Trygleren (30-08-2002) 
 
	
          | |  | Kommentar Fra : Trygleren
 | 
 Dato :  30-08-02 19:49
 | 
 |  | > så ville jeg have mine obj, kom til at hede noget henad: "BilNr1",
 > "BilNr2"....
 Så må du kalde dem det. Du kan ikke dynamisk navngive objekter ved
 instansieringen. Sådan er det!
 
 > jeg kan godt se problemet i at jeg returnerer en String, som skal være
 > navnet, men kan det ikke afhjælpes ?
 Nope. I hvert fald ikke sådan som jeg forstår dit problem.
 
 > - hvis jeg ikke vil lægge mine objekter i et array... .?
 Så må du have dem til at flyde rundt =)
 
 > Nu har jeg prøvet at finde en løsning i nogle dage før jeg spurgte mine
 > lærere, men nu synes jeg at være løbet ind i en mur.... en stor en.. kunne
 > ikke engang finde noget på google :((
 Det er fordi det ikke er muligt =)
 
 > 1000 tak
 >
 > mvh.Simon
 Sil'
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 "Sic gorgiamus allos subjectatos nunc"
 Lars Winther
 
 
 
 
 
 
 |  |  | 
 |  |