[Java] Vector kopieren, programma wacht hier niet op.

Pagina: 1
Acties:

  • Rempage0611
  • Registratie: December 2000
  • Laatst online: 23-09-2025

Rempage0611

9405 WP @ 2x SMA Sunny Boy

Topicstarter
Ik heb het volgende probleem, ik krijg van een "bag" een aantal priem getallen. Deze worden erin gezet door clients. De Server die de getallen verzameld doet dit als volgt:

code:
1
2
3
4
        while (primeNumberPart.size()==0)
            {
               primeNumberPart=implementation.pairIn("Primes");
            }


Als de waardes uit de bag zijn opgehaald door de server, wordt de bag geleegd. Het bovenstaande werkt niet, het volgende wel:

code:
1
2
3
4
5
        while (primeNumberPart.size()==0)
            {
               primeNumberPart=implementation.pairIn("Primes");
               Thread.sleep(10);
            }


De 10ms pauze zorgt ervoor dat het wel werkt. Ik denk dus dat nog voordat de primeNumberPart vector gevuld is, het programma de primeNumberPart.size()==0 check uitvoerd.

Is er dus een manier om m`n programma te laten wachten totdat primeNumberPart=implementation.pairIn("Primes"); ook echt is afgerond?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 00:32

momania

iPhone 30! Bam!

Je zou een boolean kunnen bijhouden in die aangeeft of de pairIn methode loopt en dan het leeghalen dus niet mag.

Of je moet het zo maken in de vorm van first-in-first-out.
Je moet dan dus niet in 1 keer die vector vullen met het resultaat van een methode, maar de vector zelf vullen in die methode.
iets in de vorm van:
Java:
1
2
3
4
5
6
7
8
9
10
while (true) {
    if (is_Er_Al_Data) {
       for (int i=0; i<beschikbareData.size(); i++) {
           vector.addElement(objectUitBeschikbareData);
       }
    }
    else {
        Thread.sleep(100);
    }
}

voor het uitlezen doe je dan iets van :
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
while (true) {
    if (vector.size() > 0 ) {
         // lees object in
         data = vector.elementAt(0);
         // doe iets met data

         // gooi object uit de vector
         vector.removeElementAt(0);
    }
    else {
         Thread.sleep(100);
    }
}

Het uitlezen van je vector gebeurt dus alleen als er data in staat.
Dan hoeven de twee stukken code nooit op elkaar te wachten.

Neem je whisky mee, is het te weinig... *zucht*


  • apyss
  • Registratie: April 2000
  • Laatst online: 02-12-2024
Ik weet niet precies hoe je dit voor elkaar krijgt; werk je met meerdere threads? Als dat het geval is kun je het oplossen door voor de methode pairIn() in de klasse implementation het sleutelwoord "synchronized" te zetten.

De computer wacht dan met het uitvoeren van de functie, totdat de laatste aanroep netjes is afgewerkt.