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

考虑以下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() { ... } }; 

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

只需创建一个extends Threadclass

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

并按如下方式创建:

 Task task = new Task(); 

但是,通常的做法是实现Runnable

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

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

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

两者都可以使用ExecutorService

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

 public class YourTask implements Runnable { private ResultClass result; public void run() { } public ResultClass getResult() { return result; } } 

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

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

 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); } }