Berechnungsthreads zu langsam.

Status
Nicht offen für weitere Antworten.

N-man

Mitglied
Hallo,

ich hätte ein kleines Problem... :)


Ich arbeite an einem "kleineren" Programm, das verschiedene Daten erzeugt, diese an ein Berechnungsmodul weitergibt, in diesem Modul wird ein externes Programm aufgerufen, das die eigentliche Berechnung vornimmt und die Daten ans Berechnungsmodul zurückgibt, das Berechnungsmodul speichert die Ergebnisse als Datei, die wiederum mein eigentliches Programm lädt.

Ich habe eine dataModel-Objekt als Instanz einer Klasse CDataModel zur Verfügung, mit der ich auf alle Funktionalitäten des Berechnungsmoduls zugreifen kann. Über
Code:
dataModel.StartCalculation()
kann ich die Berechnung starten in der Hoffnung, dass alles funktioniert und ich die Ergebnisse anschließend aus der Datei lesen kann.

Das funktioniert auch, aber eher schlecht als recht. Es gibt ein massives Performance-Problem (bis jetzt nur auf meinem Rechner), das aber zu beheben sein müsste, nur weiß ich nicht wie.
Dazu vielleicht mal etwas mehr Quellcode der Klasse CDataModel.


Code:
class CDataModel{

  ...
  ... 
  Thread unothread;
  ...
  ...

  public void StartCalculation(){
    // läd Daten
    CThreadCalculation thread = new CThreadCalculation();
    thread.start();
  }

  private void calculate(...){
    // bereitet eigentliche Berechnung vor
    // instanziert unothread, der eigentliche Berechnung ans externe Programm weitergibt und abholt
  }

  class CThreadCalculation extends Thread{
    ...
    ...
    public void run(){
      try{
        CDataModel.this.calculate(...);
        while(unothread.isAlive()){
        }
      }
      catch(...){}
    }
  }
}


Wie gesagt, es funktioniert... . Allerdings dauert eine externe Berechnung nun eine halbe Minute, statt einer Sekunde. Die Zeile "while(unothread.isAlive()){}" ist natürlich hässlich und wahrscheinlich geht da auch die Zeit verloren, aber ich weiß nicht, wie man es umgehen kann. Lässt man sie weg, dann ist die Berechnungsdauer wie gewohnt schnell, aber thread meldet fertig, obwohl unothread noch rechnet. Damit kann ich dann keine Ergebnisse holen. Ich habe auch ein wenig mit join() rumgespielt, aber das stoppt alles komplett und gar keine Berechnung scheint ausgeführt zu werden.

Hmm... kann mir jemand weiterhelfen?


Grüße,
Manuel
 

ARadauer

Top Contributor
Code:
while(unothread.isAlive()){ 
try {
Thread.sleep(250);
}
   catch (InterruptedException e) {}
}

versucht das mal, damit deine while schleife nicht die ganze cpu blockiert
 

Murray

Top Contributor
Sieh Dir mal Object#wait und Object#notify an. Mit wait legt man einen Thread schlafen, bis ein anderer Thread per notify sagt, dass es weitergehen soll. Das kommt mit wesentlich weniger CPU-Zeit aus als das "Busy-Waiting", bei dem man in einer Endlosschliefe immer mal wieder ein Flag prüft.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
P Eclipse langsam/unbrauchbar bei größeren Quelldateien? Allgemeine Java-Themen 8
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
M Externe Jar sehr langsam Allgemeine Java-Themen 23
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
H Kopieren sehr langsam Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
B util.Timer zu langsam? Allgemeine Java-Themen 3
W Java Applet läuft langsam Allgemeine Java-Themen 2
N Liste mit Map abgleichen extrem langsam Allgemeine Java-Themen 6
C Darstellung der Liste bei vielen Daten extrem langsam Allgemeine Java-Themen 11
B JavaPanels langsam schliessen und öffne Allgemeine Java-Themen 6
L Java Debugmodus ist unerträglich langsam! Allgemeine Java-Themen 30
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
H JID3 + vdheide schreiben zu langsam Allgemeine Java-Themen 11
M String zusammensetzen->sehr langsam Allgemeine Java-Themen 3
T ObjectOutputStream#writeObject() zu langsam. Allgemeine Java-Themen 13
G Java Socket langsam unter Linux Allgemeine Java-Themen 21
T String.split() - viel zu langsam Allgemeine Java-Themen 9
T [SVNKit] Commit sehr langsam. Allgemeine Java-Themen 7
W sin und cos bei hohen Werten extrem langsam Allgemeine Java-Themen 12
G Domainen crawlen & Domainnamen listen -> LANGSAM! Allgemeine Java-Themen 19
M Performance enorm langsam Allgemeine Java-Themen 26
H java.util.Vector langsam ? Allgemeine Java-Themen 5
T Jtree zu langsam beim klappen Allgemeine Java-Themen 8
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
D Datei öffnung sehr langsam Allgemeine Java-Themen 17
H Verschlüsselungsprogramm zu langsam Allgemeine Java-Themen 12
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
T Bilder bearbeiten unglaublich langsam Allgemeine Java-Themen 9
H Entpacken sehr langsam Allgemeine Java-Themen 10
C Thread zu langsam ==> kann doch nicht sein oder? Allgemeine Java-Themen 9
R Double Buffering zu langsam Allgemeine Java-Themen 11
D ganze packete importieren --> langsam? Allgemeine Java-Themen 9
G Funktion, die langsam wächst Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben