将Java Threading Class放入一个单独的类中

时间:2010-03-13 22:54:56

标签: java multithreading

请考虑以下SWT代码示例:

http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet151.java?view=co

如何分隔内联定义的类?

Thread thread = new Thread() {
        public void run() {
            ...
        }
    };

我想定义一个单独的类来更新表,就像它在这里一样。如何将列表传递回表格?示例代码?

3 个答案:

答案 0 :(得分:5)

只需创建一个class extends Thread

public class Task extends Thread {
    public void run() {
        // ...
    }
}

并按如下方式创建:

Task task = new Task();

然而,通常的做法是实施Runnable

public class Task implements Runnable {
    public void run() {
        // ...
    }
}

或者如果您想要一个返回结果的Thread,请实现Callable<T>,其中T表示返回类型。

public class Task implements Callable<String> {
    public String call() {
        // ...
        return "string";
    }
}

两者都可以使用ExecutorService执行。

答案 1 :(得分:4)

我不会创建一个扩展Thread的类。您更有可能拥有一个实现Runnable的类并提供对私有数据成员的访问:

public class YourTask implements Runnable
{
    private ResultClass result;

    public void run() { }

    public ResultClass getResult() { return result; }
}

查看java.util.concurrent包和新的FutureTask。我认为这是一个更好的选择。

答案 2 :(得分:1)

您可以处理传递参数或设置全局可见属性,例如:

class Foo
{
  public static String baz = "baz";
  private String bar = "bar";

  void startThread()
  {
    MyThread thread = new MyThread(bar);

    thread.start();
  }
}

class MyThread extends Thread
{
  String ref;

  MyThread(String ref)
  {
    this.ref = ref;
  }

  public void run()
  {
    // it can work with passed parameter
    System.out.println(ref);

    // but also with globally visible variables
    System.out.println(Foo.baz);
  }
}