【发布时间】:2010-03-13 22:54:56
【问题描述】:
考虑以下 SWT 代码示例:
如何分离内联定义的类?
Thread thread = new Thread() {
public void run() {
...
}
};
我想定义一个单独的类来更新表格,就像它在这里所做的那样。如何将列表传递回表格?示例代码?
【问题讨论】:
标签: java multithreading
考虑以下 SWT 代码示例:
如何分离内联定义的类?
Thread thread = new Thread() {
public void run() {
...
}
};
我想定义一个单独的类来更新表格,就像它在这里所做的那样。如何将列表传递回表格?示例代码?
【问题讨论】:
标签: java multithreading
只需创建一个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 执行。
【讨论】:
Callable<T>。然而,这不是他的问题。
我不会创建扩展 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);
}
}
【讨论】: