GUI应用程序的线程利用率



我有这样的代码:进口java.util.concurrent.ExecutorService;进口java.util.concurrent.Executors;

class Sum implements Runnable{
private int a, b;
public Sum(int a, int b){
    this.a = a;
    this.b = b;
}
public void run(){
    System.out.printf("a + b = %dt", a+b);
}
}
class Multiply implements Runnable{
private int a, b;
public Multiply(int a, int b){
    this.a = a;
    this.b = b;
}
public void run(){
    System.out.printf("a * b = %dt", a*b);
}
}
public class HelloWorld{
 public static void main(String []args){
    ExecutorService executor = Executors.newFixedThreadPool(2);
    for (int i = 0; i < 10; i++) {
        Runnable worker1 = new Sum(2, 3);
        Runnable worker2 = new Multiply(2, 3);
        executor.execute(worker1);
        executor.execute(worker2);
      }
    executor.shutdown();

 }
}

如果,我用一些文本处理操作替换sum,并与gui的一些更新相乘,就像一个短语是可以的,我想立即更新gui,这是在gui应用程序中使用线程的正确方法吗?

您可以使用线程,但是任何对SWT控件的访问必须在单个用户界面线程上完成。

您可以使用Display.asyncExec(或syncExec)从另一个线程执行此操作,例如:

Display.getDefault().asyncExec(new Runnable() {
   public void run() {
      // TODO code to change a control 
   }
});

如果你试图访问后台线程中的SWT控件,你会得到一个'Invalid thread access'错误。

最新更新