将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 Thread
的class
。
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); } }