Java gui应用程序的线程利用率

Java gui应用程序的线程利用率,java,swt,Java,Swt,我有以下代码: 导入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 = %d\t",

我有以下代码: 导入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 = %d\t", 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 = %d\t", 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的一些更新进行乘法,比如一个短语“ok”,我想立即更新gui,这是在gui应用程序中使用线程的正确方法吗?

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

您可以从另一个线程使用Display.asynceec或syncExec执行以下操作:

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

如果您尝试在后台线程中访问SWT控件,将出现“无效线程访问”错误。

否,必须在EDT事件调度线程上执行GUI更新。我使用SWT,而不是swing。事实上,我想在2天内学习并在swt中制作一个应用程序。应用程序必须使用线程。不同的名称,但如果你称之为EDT或UI线程,我知道的所有UI框架都是这样工作的。