请考虑以下SWT代码示例:
如何分隔内联定义的类?
Thread thread = new Thread() {
public void run() {
...
}
};
我想定义一个单独的类来更新表,就像它在这里一样。如何将列表传递回表格?示例代码?
答案 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);
}
}