考慮以下SWT的代碼示例:把java線程類成一個單獨的類
我怎麼能分開內嵌定義的類?
Thread thread = new Thread() {
public void run() {
...
}
};
我想要定義一個單獨的類,它就像它在這裏更新表一樣。我如何將列表傳遞迴表格?示例代碼?
考慮以下SWT的代碼示例:把java線程類成一個單獨的類
我怎麼能分開內嵌定義的類?
Thread thread = new Thread() {
public void run() {
...
}
};
我想要定義一個單獨的類,它就像它在這裏更新表一樣。我如何將列表傳遞迴表格?示例代碼?
只需創建一個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
執行。
您可以變通傳遞參數或設置全局可見的屬性,例如:
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);
}
}
我不會創建可擴展條條的類。它更可能是你有一個實現Runnable,並提供私有數據成員訪問的類:
public class YourTask implements Runnable
{
private ResultClass result;
public void run() { }
public ResultClass getResult() { return result; }
}
看一看的java.util.concurrent包和新FutureTask。我認爲這是一個更好的選擇。
如果要返回結果,還應考慮Callable而不是Runnable。 – Thilo 2010-03-14 01:45:12
該死的,我輸入太慢...... – Smalltown2k 2010-03-13 22:59:13
不要繼承Thread。實現可運行。 – Thilo 2010-03-14 01:44:38
這確實是一個更好的做法,或者甚至可以'Callable''如果你想要一個結果。然而這不是他的問題。 –
BalusC
2010-03-14 01:46:57