Ich versuche grade in einem SWT Client mehrere Verbindungen aufbauen zu lassen und von jeder Verbindung müssen über eine while Schleife Daten gelesen werden, was mit nur einem Thread natürlich das ganze UI einfriert. Hab jetzt rausgefunden dass man mit shell.getDisplay().getDefault().asyncExec(r); einen Thread starten kann der z.B. den Text von UI Elementen verändert, was ja von einem fremden Thread aus nicht geht. Zum testen hab ich jetzt 2 Runnables die nacheinander mit asyncExec gestartet werden sollen, jede schreibt 1000 mal jeweils r1 und r2 in die Ausgabetextbox. Was ich nicht verstehe ist, dass die runnables nacheinander ausgeführt zu werden scheinen. Es wird zuerst 1000 mal r1 ausgegeben und dann 1000 mal r2, obwohl es vermischt sein müsste.
Woran liegt das?
Woran liegt das?
Java:
Runnable r = new Runnable()
{
@Override
public void run() {
Random r=new Random();
int i=r.nextInt();
for(int h=0;h<1000;h++)
cout("r1|"+i+"|"+h+br);
}
};
Runnable r2 = new Runnable()
{
@Override
public void run() {
Random r=new Random();
int i=r.nextInt();
for(int h=0;h<1000;h++)
cout("r2|"+i+"|"+h+br);
}
};
//der clicklistener vom button führt diese methode aus
public void onConnectClicked()
{
shell.getDisplay().getDefault().asyncExec(r);
shell.getDisplay().getDefault().asyncExec(r2);
}
public void cout(final String str)
{
shell.getDisplay().asyncExec(new Runnable()
{
@Override
public void run() {
stConsole.setText(str+stConsole.getText());
}
});
}