Hallo,
ich stricke gerade das Kernstück, was wirklich nur aus 1 Thread, indem eine fette Doppel-Loop steht, besteht, auf Multi-Threads um. Erster Eindruck: sogar auf der 1-Core-Gurke geht es jetzt ab wie Schmitz' Katze, vorher:43s, nachher: 1s.
Nachteil: Obwohl die Rechenthreads mit LOW_PRIORITY und das GUI mit HIGH_PRIORITY laufen, blockiert die Anwendung, bis die Berechnungen fertig sind.
Hier mal der Code:
GUI:
Code:
public juliapanel()
{
feddich=0;
jul=new fracfunct();
set_size(panelx,panely);
refresh=new Thread(this);
refresh.setPriority(Thread.MAX_PRIORITY);
refresh.start();
}
public void run()
{
while (refresh!=null)
{ repaint();
if (tg.activeCount()==0) if (feddich==1) // tg ist eine ThreadGroup
{ feddich=2;
manjulia.main.popup(""+(System.currentTimeMillis()-start)/1000+"s");
}
try { Thread.sleep(100); } // 0.1s Sendepause
catch (InterruptedException e) { break; }
}
}
... und hier der "Rechenknecht":
Code:
public void mach_bild()
{
feddich=1;
begrenzer=false;
if (gb!=null) gb.dispose();
gb=buffima.getGraphics();
gb.setColor(Color.GRAY);
gb.fillRect(0,0,sxmax,symax);
start=System.currentTimeMillis();
tg.setMaxPriority(Thread.MIN_PRIORITY); // sollte alle Threads in dieser Gruppe ausbremsen
Thread[] th=new Thread[symax];
for (int i=0; i<symax; i++) // symax ist irgendwas von 400 bis 3000
{ final int ii=i;
th[i]=new Thread(tg,"zeile")
{
@Override public void run() { mach_zeile(ii); }
};
th[i].start();
}
}
Ich bin nicht sooo fit in Threads, wo ist da mein Denkfehler?
Gruß,
Ulrike
Lesezeichen